我在使用 Model 对象的->with()
方法检索对象时遇到问题。
在我的应用程序中,我有 4 个表(我在这里写我认为是我的表的基本字段,所以(:
**Categories**:
id
**Subcategorie**
id
id_categorie
**UserSubcategorie**
id_user
id_subcategorie
**Lawyers**
user_id
我正在尝试获取给定分类的所有用户(这意味着所有用户都连接到所有分类的子分类(
我的要求如下:
$categorie = LegalCategory::whereIn('id', $arrayCat)->with('legal_subcategories')->get();
foreach ($categorie as $k =>$cat){
$selectedCat[$k]['categorie'] = $cat;
$selectedCat[$k]['lawyers'] =
Lawyer::Join('lawyers_legal_subcategories', 'lawyers.user_id', '=', 'lawyers_legal_subcategories.user_id')
->with('lawyer_subcategories')
->whereIn('lawyers_legal_subcategories.legal_subcategory_id', $cat->legal_subcategories)
->get();
}
我正确地得到了律师,但是当我调查lawyer->legal_subcategories
时,我有NULL
我不明白为什么,因为当我尝试这个时:
Lawyer::orderBy('created_at')->take(4)->with('lawyer_subcategories')->get()
我在律师对象中有我的子类别。
有人知道问题可能是什么吗?
问题出在这一行:
->whereIn('lawyers_legal_subcategories.legal_subcategory_id', $cat->legal_subcategories)
您需要传递 ID 数组而不是所有子类别!
$categorie = LegalCategory::whereIn('id', $arrayCat)
->with('legal_subcategories')
->get();
foreach ($categorie as $k =>$cat){
$selectedCat[$k]['categorie'] = $cat;
$selectedCat[$k]['lawyers'] =
Lawyer::Join('lawyers_legal_subcategories', 'lawyers.user_id', '=', 'lawyers_legal_subcategories.user_id')
->with('lawyer_subcategories')
->whereIn('lawyers_legal_subcategories.legal_subcategory_id',
$cat->legal_subcategories->pluck('id'))
->get();
}
你应该学习如何使用有很多通过和渴望加载。这将使您的生活更轻松。
在您的情况下,您正在进行大量查询,从长远来看,这将使您的数据库受到影响。急切的加载和Laravel雄辩提供了非常有效的功能来处理此类情况。
如果模型定义正确,则使用 with(( 方法检索所有需要的数据。