[英]Eloquent Laravel - Retrieve results only if the relationship exists
I am trying to retrieve a list of genres which have a track assigned to them, I am using a whereHas eloquent query but feel a little lost. 我正在尝试检索已分配给它们的轨道的类型列表,我正在使用whereHas雄辩的查询但感觉有点迷失。
I have the following 我有以下内容
//model
public function workingGenre() {
$this->whereHas('tracks', function($query) {
$query->where('');
});
return $this->tracks()->first();
}
//controller (where i am passing variables etc)
$genres = Genre::with('tracks')->get();
//my view
@foreach($genres as $genre)
{{print_r($genre->workingGenre())}}
@endforeach
I'm aware that my Where is empty, currently my print_r returns the following: 我知道我的Where是空的,目前我的print_r返回以下内容:
1
App\Track Object
(
[table:protected] => Track
[fillable:protected] => Array
(
[0] => id
[1] => GenreId
[2] => Title
[3] => CreatedById
[4] => SelectedCount
[5] => ProducerName
[6] => SourceId
[7] => Published
)
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[id] => 6
[GenreId] => 4
[Title] => Guns Up
[CreatedById] => 1
[SelectedCount] => 0
[ProducerName] =>
[SourceId] => 1
[Published] => 1
)
[original:protected] => Array
(
[id] => 6
[GenreId] => 4
[Title] => Guns Up
[CreatedById] => 1
[SelectedCount] => 0
[ProducerName] =>
[SourceId] => 1
[Published] => 1
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[casts:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
[wasRecentlyCreated] =>
)
**And so on**
A push in the right direction would be great, I am finding this whole eloquent stuff really useful but hard to wrap my head around. 向正确的方向推进会很棒,我发现这整个雄辩的东西真的很有用,但很难绕过我的脑袋。
Thanks 谢谢
$genres = Genre::with('tracks')->has('tracks')->get();
foreach($genres as $genre)
//do what you need
endforeach
This way you will get Genre only if they Have Tracks and Eager Load them, if you dont want eager loading remove ::with('tracks')
这样你就可以获得Genre,只要他们有曲目和渴望加载它们,如果你不想急切加载remove
::with('tracks')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.