This ^^
Also since you'll get a Collection back, you could sort it with some Laravel helpers (see docs) - however doing it inside the query will be more efficient.
Ehesp said:
This ^^
Also since you'll get a Collection back, you could sort it with some Laravel helpers (see docs) - however doing it inside the query will be more efficient.
But how do I do it in the query?
MaggieCabrera said:
But how do I do it in the query?
Maybe the Eager Load Constraints (towards the bottom of the Eager Loading section) will help with this.
Are you looking to do something like....?
// Returns collection of Teammembers ordered by last name with each
// Teammember's Hostess eager loaded.
$sortedMembers = Teammember::orderBy('lastname', 'desc')
->with('hostess')->get();
Or are you looking at how to do this on the inital Operation::find($id) query?
I don't care when to do it, but it seems like with my current method there is no place to do it and I need to change the way I do the query? I am very lost with this right now. I'd prefer if the Operation::find($id) was already sorted from the start, changing to eager loading means changing most of my code, right? Besides I've never used it, I'm barely starting with laravel
Change Operation.php content to
public function team()
{
return $this->hasMany('Team')->orderBy('lastname', 'desc');
}
uldisrudzitis said:
Change Operation.php content to
public function team() { return $this->hasMany('Team')->orderBy('lastname', 'desc'); }
I get:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'lastname' in 'order clause' (SQL: select * from `teams` where `teams`.`operation_id` = 1 order by `lastname` desc) (View: /Users/Maggie/Sites/hotesses/laravel/app/views/operations/index.blade.php)
uldisrudzitis said:
Change Operation.php content to
public function team() { return $this->hasMany('Team')->orderBy('lastname', 'desc'); }
That returns the Operation's Teams ordered by lastname. Teams don't have a lastname, so that is the reason for the error.
I think uldisrudzitis meant something like the following.
Teammember.php
public function hostess()
{
return $this->belongsTo('Hostess', 'hostess_id')->orderBy('lastname', 'desc');
}
But the above doesn't make sense because each Teammember belongsTo (meaning it is only related to one) Hostess. You'd have to sort the results as mentioned by Ehesp in the second post, unless you want to adjust your relationships. :/
Does the reasoning behind this make sense?
jlaswell said:
uldisrudzitis said:
Change Operation.php content to
public function team() { return $this->hasMany('Team')->orderBy('lastname', 'desc'); }
That returns the Operation's Teams ordered by lastname. Teams don't have a lastname, so that is the reason for the error.
I think uldisrudzitis meant something like the following.
Teammember.php
public function hostess() { return $this->belongsTo('Hostess', 'hostess_id')->orderBy('lastname', 'desc'); }
But the above doesn't make sense because each Teammember belongsTo (meaning it is only related to one) Hostess. You'd have to sort the results as mentioned by Ehesp in the second post, unless you want to adjust your relationships. :/
Does the reasoning behind this make sense?
Yes, I reached the same conclusion about trying to sort the models. Also sorting Operation::find($id) makes no sense either since I'm only querying operation, I only get the info from the members in the view, when I'm doing the foreach loops. I see why it won't work but I'm not sure how to approach the solution. It seems that I need to remake my query and make the joins in the controller? That way I can sort it there, but I wouldn't be using the model functions on the view then.
It seems like there should be a way to benefit from eloquent and also be able to sort everything out, but I'm not clear how...
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community