您好我试图查询我的任务表。关于表格的一些背景信息以及它们如何相关。
用户,创建项目和任务,项目和任务的状态可以从状态表中选择,用户自己创建,我计划拥有默认值,但用户可能想要创建自己的状态。
默认情况下,我想查找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
id | user_id | task_id | status_id
我首先尝试查询我的数据库,以便确保返回的数据正确无误。所以我已将查询更改为以下内容:
$user = User::with(array('tasks', 'task.status', 'tasks.taskstatus',
'tasks.clients'))->find(Auth::user()->id);
我正在尝试返回如下(请记住我还想查询状态表,以便我能够返回状态名称):
@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
public function status(){
return $this->hasOne('Status', 'status_id');
}
public function taskstatus() {
return $this->hasMany('TaskStatus', 'status_id');
}
public function tasks()
{
return $this->hasMany('Task');
}
public function taskstatus()
{
return $this->hasMany('TaskStatus', 'status_id');
}
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, ))
我确信我的关系定义不正确,但我不确定如何纠正这些问题。任何人都可以帮忙吗?
答案 0 :(得分:0)
您也可以尝试以下代码:
$user = User::whereHas('task.status', function($q)
{
$q->where('status', '!=', 'close');
})
->with('task', 'task.clients')
->where('id', Auth::user()->id)
->first();
查看querying relationships上的雄辩文档。
还要记住不要回顾,return
视图。
答案 1 :(得分:0)
错误似乎与Laravel(嗯,实际上是Eloquent)得到错误的表名这一事实有关:在task_statuses
而不是task_status
之下。请记住,Eloquent将尝试复数命名模型以获取表名。
SQLSTATE[42S02]: Base table or view not found: 1146 Table
'imanage.task_statuses' doesn't exist
因此,要么重命名您的表格以符合Laravel的期望,要么在您的模型中指定custom table name:
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');
}
您的任务是否具有一个状态,还是具有多个状态?