2017-08-25 3 views
0

Comment appliquer le tri dans une requête éloquente avec une table relationnelle avec "hasOne" Relation?Trier dans Laravel en utilisant la requête Eloquent

Marque Modèle

class Brand extends Eloquent 
{ 
    protected $table = 'brand'; 
    protected $primaryKey = 'id'; 
    protected $fillable = ['brand_name']; 
    public $sortable = ['brand_name']; 

    public function brandModel() { 
     return $this->hasOne('App\Brandmodel', 'brand_id') 
         ->select('id', 'brand_id', 'brand_model_name'); 
    } 
} 

--------------------------------------- 

class Brandmodel extends Eloquent 
{ 
    protected $table = 'brandmodel'; 
    protected $primaryKey = 'id'; 
    protected $fillable = ['brand_id']; 
    public $sortable = ['brand_model_name']; 
} 

Dans ce cas, nous pouvons trier en utilisant "BRAND_NAME". Mais je ne suis pas capable de trier en utilisant "brand_model_name".

Répondre

0

Si vous voulez faire cela, vous devrez sortir un peu d'Eloquent et rejoindre la table dont vous avez besoin.

Brand::join('brandmodel', 'brandmodel.brand_id', '=', 'brand.id') 
    ->orderBy('brandmodel.brand_model_name') 
    ->get(); 

Je voudrais aussi vous recommande de re-travailler vos noms de table pour correspondre aux conventions de nommage par défaut Eloquent car elle rendrait le code un peu plus facile à analyser.

+0

Salut, Merci pour votre réponse, Mais je m'attends à ce que cela soit possible avec "Fully Eloquent" – Franklin

+0

Cela utilise juste le générateur de requête d'Eloquent pour rejoindre la table, ce n'est pas possible avec la méthode de relation que vous avez configurée. C'est comme "Eloqent-ly" comme vous l'aurez compris. – Dwight

0

Vous devriez essayer cela peut être le travail pour vous:

Brand::leftJoin('brandmodel', 'brandmodel.brand_id', '=', 'brand.id') 
    ->orderBy('brandmodel.brand_model_name','desc') 
    ->get(); 

Hope this travail de solution pour vous !!!