2017-02-05 6 views
2

INFORMATIONSLaravel Eloquent - orderBy Spalte in verwandten Modell finden

Datenbank

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'); 
}} 

FRAGE

Ich möchte alle Ereignisse (Event-Modell) und Reihenfolge von "wann" Spalte in verwandten EventDetail-Modell. Ich schrieb eine Abfrage und es funktioniert:

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

aber wenn ich ->where('to_user_id', '=', 0) Klausel i Fehler erhalten hinzufügen möchten. Wie kann ich es beheben?

Außerdem möchte ich wissen, wenn diese Abfrage mit guter Praxis übereinstimmt? Können Sie es besser schreiben?

Antwort

2

Ok, musste Ihr Projekt neu erstellen/Tabellen Alle Tests laufen ordnungsgemäß, aber ich habe ein paar Dinge bemerkt, die Sie möglicherweise ändern möchten.

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

Auch kann der Code besser sein, wenn Sie ein Ereignis

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

haben Wie Sie sehen können, die ein Ereignis, das ich gespeichert hat 2 Ereignisdetails & sie alle von ASC geordnet. enter image description here

Sie können die andere Methode verwenden, die 'with()' nicht verwendet, aber ich bevorzuge es. Sehr schön für JSON-Ergebnisse, wo Sie viele verwandte Modelle verketten können.

Hoffe, das hilft

+1

Leider funktioniert orderBy nicht. –

+1

Nach dem Bearbeiten ... sieht es wieder so aus, als ob es funktionieren sollte, aber orderBy funktioniert nicht :-( –

+0

Es ist schön, du suchst besser ist der Codierung. Ich kann das bewundern :) –

0

Ich löste das Problem mit dieser Abfrage. Ich sollte

$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(); 

jedoch ->where('events.to_user_id', '=', 0) so hinzufügen, ich möchte wissen, ob diese Abfrage mit guter Praxis ist richtig? Können Sie es besser schreiben?

Verwandte Themen