嗨,我想查询我的任务表。关于这些表的一些背景信息以及它们之间的关系。
用户,创建项目和任务,可以从状态表中选择项目和任务的状态,用户做出自己的,我计划有默认的,但用户可能想要创建自己的。
默认情况下,我希望找到所有的用户任务,在这些任务中,status_name
保存在statuses
表does not
equal
中。我决定最好实际上创建一个名为task_status
的表,它既保存task_id
,也保存status_id
。我仍然希望找到已登录的用户任务,然后根据任务表中的status_id
查找状态名称,这可以在statuses
表中引用。然后,我只想显示不等于closed
的任何记录,但是下面解释的第一部分比第一次预计的要复杂。
我的表结构如下:
表结构
用户
id | username | email
任务
id | user_id | client_id | project_id | status_id | task_name | task_brief
状态
id | status_name
项目
id | user_id | client_id | status_id | type_id | project_name | project_brief
task_status
id | user_id | task_id | status_id
我试图先查询我的数据库,这样我就可以确保返回的数据是正确的。因此,我将查询更改为:
$user = User::with(array('tasks', 'task.status', 'tasks.taskstatus',
'tasks.clients'))->find(Auth::user()->id);
我试图按如下方式返回(请记住,我还想查询status表,以便能够返回状态的名称):
@foreach($user->tasks as $task)
{{ $task->task_name }}
@if(!is_null($task->clients))
{{ $task->clients->client_code }}
@endif
@if(!is_null($task->taskstatus))
{{ $task->taskstatus->status_name }}
@endif
@endforeach
我的模特:
Task.php
public function status(){
return $this->hasOne('Status', 'status_id');
}
public function taskstatus() {
return $this->hasMany('TaskStatus', 'status_id');
}
Status.php
public function tasks()
{
return $this->hasMany('Task');
}
public function taskstatus()
{
return $this->hasMany('TaskStatus', 'status_id');
}
TaskStatus.php
public function tasks()
{
return $this->hasMany('Task', 'task_id');
}
public function status() {
return $this->belongsTo('Status', 'status_id')
}
但是,使用上述方法将返回以下错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table
'imanage.task_statuses' doesn't exist (SQL: select * from `task_statuses`
where `task_statuses`.`status_id` in (?, ?, ?, ?, ?, ?, ?))
(Bindings: array ( 0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6, 6 => 7, ))
我确信,我的关系被错误地定义了,但是我不知道如何纠正these.Can,任何人的帮助?
发布于 2014-03-14 21:31:26
您还可以尝试以下代码:
$user = User::whereHas('task.status', function($q)
{
$q->where('status', '!=', 'close');
})
->with('task', 'task.clients')
->where('id', Auth::user()->id)
->first();
查看查询关系上雄辩的文档。
还请记住,不回显视图,而是return
视图。
发布于 2014-03-15 15:44:34
这个错误似乎与这样一个事实有关: Laravel (实际上是雄辩的)是得到了错误的表名:下面是task_statuses
而不是task_status
。记住,雄辩者将尝试多元命名模型以获得表名。
SQLSTATE[42S02]: Base table or view not found: 1146 Table
'imanage.task_statuses' doesn't exist
因此,要么重命名您的表以符合Laravel预期,要么在您的模型中指定一个自定义表名
class TaskStatus extends Eloquent {
protected $table = 'task_status';
...
此外,我不清楚您代码的这一部分:
Task.php
public function status(){
return $this->hasOne('Status', 'status_id');
}
public function taskstatus() {
return $this->hasMany('TaskStatus', 'status_id');
}
您的任务是否具有one状态,还是具有多个状态?
https://stackoverflow.com/questions/22418713
复制