2017-02-05 6 views
2

INFORMATIONSLaravel雄弁 - ORDERBY列は、関連するモデルで

データベース

events  | id | to_user_id | from_user_id | 
event_details | id | event_id  | when   | 

Event.php

class Event extends Eloquent { 

protected $table = 'events'; 

public function event_detail() { 
    return $this->hasOne('EventDetail'); 
}} 

EventDetail.php

class EventDetail extends Eloquent { 

protected $table = 'event_details'; 

public function event() { 
    return $this->belongsTo('Event', 'event_id'); 
}} 
を見つけます 質問

関連するEventDetailモデルですべてのイベント(イベントモデル)と「when」列を取得したいと考えています。私は、クエリを書き、それが動作します:

$event = Event::join('event_details as p', 'p.event_id', '=', 'event.id') 
        ->orderBy('p.when', 'asc') 
        ->select('events.*') 
        ->with('event_detail') 
        ->get(); 

しかし、私はエラーを取得->where('to_user_id', '=', 0)句を追加したいと思います。 どうすれば修正できますか?

さらに、このクエリが適切であればを知りたいと思いますか? あなたはそれをより良く書くことができますか?

答えて

2

あなたのプロジェクト/テーブルを再作成する必要がありました。 すべてのテストが正しく実行されていますが、変更を検討するいくつかの点に気づきました。あなたが見ることができるように、私が格納されている1つのイベントが2つのイベント詳細&を持って、彼らはすべてのASCによって順序付けされているイベントに

public function event_detail(){ 
    //considering you will have multiples? or just the one event detail? 
    return $this->hasMany('EventDetail'); 
} 

を持っている場合

$events = Event::with(['event_detail'=> function($query) { 
    $query->orderBy('when', 'asc'); 
}]) 
->where('to_user_id', 0) 
->get(); 

また、あなたのコードが良いかもしれません。 enter image description here

'with()'を使用しない他の方法を使用することはできますが、私はそれを優先します。多くの関連モデルをデイジーチェインできるjsonの結果には非常にいいです。

ホープこれは私がこのクエリで問題を解決し

+1

残念ながら、orderByは機能しません。 –

+1

編集後...再び動作するはずですが、orderByは動作しません:-( –

+0

いいのは、コーディングのほうがいいと思っています。 –

0

に役立ちます。私はそう

$event = Event::join('event_details as p', 'p.event_id', '=', 'event.id') 
       ->orderBy('p.when', 'asc') 
       ->select('events.*') 
       ->where('events.to_user_id', '=', 0) 
       ->with('event_detail') 
       ->get(); 

->where('events.to_user_id', '=', 0)を追加する必要がありますしかし、私はこのクエリは良い習慣と正しいかどうかを知りたいですか? あなたはそれをより良く書くことができますか?