使用Laravel 4 Eloquent打印每个任务列表的任务

时间:2014-11-27 20:43:11

标签: laravel laravel-4 twitter-bootstrap-3 eloquent

我正在尝试在一个页面中显示多个任务列表及其各自的任务。在我的控制器中,我使用以下内容:

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

2 个答案:

答案 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
));