我有Laravel 5.2
one-to-many relation
我希望返回模型并为关系设置条件。
我试过这个:
$categories = Category::with(['descriptions' => function($d) use ($default_language) {
$d->where('language_id', $default_language->id);
}])->get();
它工作正常,我只想要其他东西:关系不应该是一个集合或数组,只是一个简单的对象。我想做像
这样的事情$d->where('language_id', $default_language->id)->first();
,就这种情况而言first()
无效。有什么想法吗?
修改
实际上first()
无法正常工作,它只返回第一个返回的对象的描述,而其他对象则不返回任何内容。
答案 0 :(得分:1)
试试这个:
$categories = \Jobinja\CMS\Blog\Models\Category::with([
'descriptions' => function ($q) use ($defaultLanguage) {
return $q->where('language_id', $defaultLanguage->id)->take(1);
}
])
->get()
->map(function ($item) {
if ($item->descriptions->isEmpty() === false) {
$item->description = $item->descriptions->first();
}
return $item;
});
并进入描述:
foreach ($categories as $category) {
$description = $category->description;
}
答案 1 :(得分:0)
您无法做到这一点,但您可以稍后在集合中使用first()
,例如在视图中:
@foreach ($categories as $category)
{{ $category->descriptions->first()->name }}
@endforeach
答案 2 :(得分:0)
我可以说代替first()
find()
并使用language_id
或$default_language->id
,并尝试在表格中首先找到{{1}列并分配值。如果您有不同的ID列名称,请将其添加到id
之类的查找中。
如果你想要数组像 - &gt; toArray()。您可以通过修补程序测试不同的方案。 find(['your_column_name' => '<your_value'])
这是一个文档链接 - &gt; https://laravel.com/docs/5.3/eloquent#retrieving-single-models