我正在尝试在一个页面中显示多个任务列表及其各自的任务。在我的控制器中,我使用以下内容:
public function index()
{
$tasks_lists = Task_List::all();
$tasks = Task_List::find(1)->tasks;
return View::make('tasks.index', array(
'tasks' => $tasks,
'tasks_lists' => $tasks_lists
));
}
使用
$tasks = Task_List::find(1)->tasks;
将返回所有任务列出指定给任务列表1的任务。所以我猜这里是我的问题,我应该用什么类型的条款来实现我的目标?
我认为我的预言:
@foreach ($tasks_lists as $task_list)
<h2>{{ $task_list->title }}</h2>
<ul>
@foreach ($tasks as $task)
<li>
{{ Form::open() }}
<input type="checkbox" name="task" value="{{ $task->id }}" />{{ $task->name }}
{{ Form::close() }}
</li>
@endforeach
</ul>
@endforeach
答案 0 :(得分:1)
您不需要在控制器中查找任务,因此可以简单地删除:
public function index()
{
$tasks_lists = Task_List::all();
$tasks = Task_List::find(1)->tasks;
return View::make('tasks.index', array(
'tasks' => $tasks,
'tasks_lists' => $tasks_lists
));
}
然后,您需要在视图中获取每个任务列表的任务,如下所示:
@foreach ($tasks_lists as $task_list)
<h2>{{ $task_list->title }}</h2>
<ul>
@foreach ($task_list->tasks as $task)
<li>
{{ Form::open() }}
<input type="checkbox" name="task" value="{{ $task->id }}" />{{ $task->name }}
{{ Form::close() }}
</li>
@endforeach
</ul>
@endforeach
这应该足够了。 :)
答案 1 :(得分:1)
不是为其中一个Task_List
模型(在你的情况下是id为1的模型)中获取任务,而是应该为每个 task_list获取它们。
在您的观点中执行此操作:
@foreach ($tasks_lists as $task_list)
<h2>{{ $task_list->title }}</h2>
<ul>
@foreach ($task_list->tasks as $task)
{{-- etc --}
@endforeach
</ul>
@endforeach
注意:如果您这样离开,每次拨打->tasks
时都会对数据库进行查询。您需要使用eager loading。这是通过添加with('relationship-name')
$tasks_lists = Task_List::with('tasks')->get();
return View::make('tasks.index', array(
'tasks_lists' => $tasks_lists
));