我正试图通过该手机的存储选项从数据库中获取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();
除了最后一行回馈所有手机,而不是他们的存储选项。有什么建议吗?
答案 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);