2017-08-29 4 views
0

Je dois commandercomment puis-je commander relation avec hâte en utilisant()

Content::with('blocks.settings')->where('slug', $slug)->first(); 

blocs par une colonne « ordre », comment puis-je faire?

je suis au courant de cette approche:

with(array('model' => function($query) { 
     $query->orderBy('result', 'DESC'); 
    })) 

mais je ne sais pas comment cela pourrait fonctionner dans mon cas? J'utilise chargement impatient imbriqué et il me semble que l'approche ci-dessus ne fonctionnera que pour un chargement hâtif niveau unique?

Quelqu'un peut-il me donner une idée de la façon de résoudre ce problème?

Répondre

1

Pour ajouter la contrainte sur le modèle blocks,

Content::with(array(
    'blocks.settings' => function($query) { 
     $query->orderBy('order', 'DESC'); // this constraint works on blocks model 
    }  
))->where('slug', $slug)->first(); 

Si vous voulez ajouter des contraintes sur le modèle settings, essayez cette

Content::with(array(
    'blocks'=> function($query) { 
     $query->with(array(
        'settings'=> function($query) { 
         $query->orderBy('order', 'DESC'); // this constraint works on blocks model 
        }  
       )) 
       ->ordery('order', 'DESC'); // this constraint works on blocks model 
    }  
))->where('slug', $slug)->first(); 
2

Cela devrait résoudre votre problème:

Content::with(array(
    'blocks' => function($query) { 
     $query->orderBy('order', 'DESC'); 
    }, 
    'blocks.settings' 
))->where('slug', $slug)->first();; 

D'abord, nous disons à charger les blocs et les commander par la colonne order. Le deuxième élément du tableau indique également de charger les paramètres avec tous les blocs.