【问题标题】:relationship and blade in laravellaravel 中的关系和刀片
【发布时间】:2013-01-06 23:30:09
【问题描述】:

如下所述,我有 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

表关系:

user has_many logs
task has_many logs

logs belongs_to user 
logs belongs_to  task

我想要实现的是获取包含用户名、任务名称、日期和时间的日志。

控制器:

return View::make('log.index')
            ->with('logs',log::all());

刀片模板

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

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

【问题讨论】:

  • {{$log-&gt;users()-&gt;name}} 您如何期望多个用户拥有一个名称?
  • @WaleedKhan 我是 laravel 的新手,我只是在尝试,但没有奏效。也试过 {{$log->users(user_id)->name}}

标签: php mysql laravel eloquent blade


【解决方案1】:

更好的方法是在你的模型中定义反向 hasMany 关系,如 here 所记录的那样

所以在你的日志模型中,可能你需要定义:

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

    public function user(){
         return $this->belongsTo('User');
    }
    public function task(){
         return $this->belongsTo('Task');
    }
}

那么在您看来,您可以使用:

$log->user()->first()->name

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

$log->user->name

【讨论】:

  • $log-&gt;user()-&gt;first()-&gt;name 这会导致 N+1 问题。
【解决方案2】:

$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

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

@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

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    相关资源
    最近更新 更多