我在视图中有一个显示任务的foreach。
@foreach($project_item->getVisibleTasks($tasklist->id) as $task)
在我的模型中,我有以下功能:
public function getVisibleTasks($tasklist_id)
{
return $this->hasMany('App\Task', 'project_id')->where('tasklist_id', $tasklist_id)->orderBy('order', 'asc');
}
删除参数时,该功能可以正常工作。 (但显示所有结果。因为删除了where子句)。当我在视图中传递静态数字(例如1)时,它仍然无效。
我怎样才能做到这一点?
问候,
迪伦
我不确定你在设置雄辩的关系时可以使用where子句。 Laravel Eloquent Relationship doc page并不认为这是可能的。
如果可能,请使用下面的代码,您可以使用eloquent查询构建器;
public function getVisibleTasks($tasklist_id){
return App\Task::where('id',$this->project_id)->where('tasklist_id',$tasklist_id)->orderBy('order', 'asc')->get();
}
它可能无法正常工作,因为在关系中调用了关系查询,例如,您可以创建关系函数和查询函数
public functon tasks() {
return $this->hasMany('App\Task', 'project_id');
}
然后你的功能将是这样的
public function getVisibleTasks($tasklist_id)
{
return $this->tasks()->where('tasklist_id', $tasklist_id)->orderBy('order', 'asc');
}
那样laravel获取关系,然后过滤它。
这看起来很奇怪,看起来好像你正在定义一个关系并运行定义关系的查询。您应该首先在project_item模型中定义关系
public function getVisibleTasks()
{
return $this->hasMany('App\Task', 'project_id');
}
还要定义该关系的反转。
然后通过控制器从控制器中调用它
$project_item ->getVisibleTasks()->orderBy('order', 'asc');
这将自动调用与您的模型相关的数据。