laravel中的关系和刀片

Dan*_*har 8 php mysql laravel eloquent blade

我有3个表,如下所述.

Table 1(user): 
id    username   password  Name Age

Table 2(tasks):
id  task_name  description

Table 3(logs) 
id user_id task_id date hours
Run Code Online (Sandbox Code Playgroud)

表关系:

user has_many logs
task has_many logs

logs belongs_to user 
logs belongs_to  task
Run Code Online (Sandbox Code Playgroud)

我想要实现的是获取具有用户名,任务名称,日期和小时的日志.

控制器:

return View::make('log.index')
            ->with('logs',log::all());
Run Code Online (Sandbox Code Playgroud)

刀片模板

@foreach($logs as $log)
             <tr>
                <td>{{$log->id}}</td>
                <td>{{$log->users()->name}}</td>
                <td>{{$log->tasks()->name}}</td>
            <tr>
@endforeach
Run Code Online (Sandbox Code Playgroud)

但无法从相应的表中获取用户名称和任务名称.任何帮助表示赞赏.

Xia*_*Liu 14

更好的方法是在模型中定义逆hasMany关系,如此处所述

因此,在您的日志模型中,您可能需要定义:

class Log extends Eloquent {
    protected $table = "logs";

    public function user(){
         return $this->belongsTo('User');
    }
    public function task(){
         return $this->belongsTo('Task');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您可以使用:

$log->user()->first()->name
Run Code Online (Sandbox Code Playgroud)

甚至更好,通过使用动态属性:

$log->user->name
Run Code Online (Sandbox Code Playgroud)


Ble*_*ing 7

$ log-> users()和$ log-> tasks()返回一个查询对象.下面,每次调用返回的结果与调用$ log-> users() - > get()和$ log-> tasks() - > get()相同.因为关系是多对多的,所以您需要迭代$ log-> users和$ log-> tasks来检索每条记录.

@foreach($logs as $log)
         <tr>
            <td>{{$log->id}}</td>
            <td>
                @foreach($log->users as $user)
                {{$user->name}},
                @endforeach
            </td>
            <td>
                @foreach($log->tasks as $task)
                {{$task->name}},
                @endforeach
            </td>
        <tr>
@endforeach
Run Code Online (Sandbox Code Playgroud)

如果您希望将特定用户/任务附加到日志,则必须构建查询.

@foreach($logs as $log)
         <tr>
            <td>{{$log->id}}</td>
            <td>{{$log->users()->where('id', '=', $userID)->first()->name}} </td>
            <td>{{$log->tasks()->where('id', '=', $taskID)->first()->name}} </td>
        <tr>
@endforeach
Run Code Online (Sandbox Code Playgroud)