Laravel以关系为条件:return first()

时间:2016-11-14 10:39:10

标签: laravel

我有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()无法正常工作,它只返回第一个返回的对象的描述,而其他对象则不返回任何内容。

3 个答案:

答案 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