9

以下に示すように、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

ただし、それぞれのテーブルからユーザー名とタスク名を取得できません。どんな助けでも大歓迎です。

4

2 に答える 2

18

より良い方法は、ここに記載されているように、モデルで逆 hasMany 関係を定義することです

したがって、ログ モデルでは、おそらく以下を定義する必要があります。

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
于 2014-09-24T13:49:58.187 に答える
8

$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
于 2013-01-23T17:12:43.010 に答える