2016-07-12 2 views
0

ビュー内のステータステーブルからデータを取得する必要があります。エイリアスを入れようと試み、3時間以上グーグルグーグル、私は失われています。任意のアイデアはどのように?2つのテーブルがlaravelで表示するために渡すデータを結合します

のcontrolerコード:

$action= DB::table('actionplan') 
    ->join('status','actionplan.status','=','status.id') 
    ->select('status.name as testas','actionplan.*') 
    ->where([['user_id','=',$name],['done','<>',1]])->get(); 

ビューコード:

@foreach($teams as $item) 
<th scope="row">1</th> 
<td>{{$item->name}}</td> 
<td>{{$item->start_date}}</td> 
<td>{{$item->end_date}}</td> 
<td>{{$item->comment}}</td> 
<td>{{$item->status()->name}}</td> 
+2

モデル間の関係を作成すると、より簡単になりますhasMany、hasOne、belongsToなど – Poria

+0

@Poriaここにモデルはありません。 – apokryfos

+0

コードでエイリアスを定義しているようですが、使用していないようです。 '{{$ item-> testas}}' – apokryfos

答えて

0

あなたが本当にあなたのデータベーステーブルのモデルを実装する必要があります。これはあなたが求めているアドバイスではありませんが、これに関してはクエリを大幅に簡略化します。

あなたActionPlan.phpモデル:

use Illuminate\Database\Eloquent; 

class ActionPlan extends Model 
{ 
    protected $table = 'actionplan'; 

    public function status() 
    { 
     return $this->hasOne(App\Status::class, 'id', 'status'); 
    } 
} 

あなたStatus.phpモデル:

use Illuminate\Database\Eloquent; 

class Status extends Eloquent 
{ 
    protected $table = 'status'; 
} 

あなたのクエリ:

$actions = Action::whereHas('status') 
    ->where('user_id', '=', $name) 
    ->where('done', '<>', 1) 
    ->get(); 

または:

$actions = Action::whereHas('status') 
    ->whereUserId($name) 
    ->having('done', '<>', 1) 
    ->get(); 
関連する問題