Laravel数据库查询构建器只需一条记录即可查找::

时间:2017-03-23 19:21:57

标签: laravel query-builder

我正试图通过该手机的存储选项从数据库中获取1部手机。这个解决方案为我提供了所有手机及其存储选项:

$phones = Phone::with('storageOptions')->get();

现在这个解决方案只给我一部手机,它有3个存储选项,除了它给同一部手机3次:

$phone = Phone::find($phone->id)
        ->join('storage_options', 'phones.id', '=', 'storage_options.phone_id')
        ->where('storage_options.phone_id', '=', $phone->id)
        ->get();

现在我认为是一个聪明人,只需尝试这行代码:

$phone = Phone::find($phone->id)->with('storageOptions')->get();

除了最后一行回馈所有手机,而不是他们的存储选项。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

with()是一个查询修饰符。 find()get()是查询执行者。您只需确保在执行查询之前放置所有查询修饰符:

$phone = Phone::with('storageOptions')->find($phone->id);

我注意到您在填充$phone时尝试取手机。如果您已经拥有手机,而您只是尝试加载存储选项,则可以使用load()方法,或只访问关系属性,并且关系将延迟加载:

// manually load the relationship on an existing record
$phone->load('storageOptions');

// or, just access the relationship property to lazy load the relationship
dd($phone->storageOptions);