我正在做一个项目,我需要使用Laravel Doc Has Many Through中的HasManyThrough
从表A到表C检索数据,表B作为中间体。
我有三个表Categorie
Sous
* Categorie
和Produit
,这是关系:Categorie
--> Hasmany Sous_Categorie
-->Hasmany Produits
.*
And this is my tables
Categorie:
- id
- name
Sous_categorie:
- id
- categorie_id
- name
Produits:
- id
- sous_categorie_id
- name
这是我的模特Categorie.php
class Categorie extends Model
{
public function souscategories()
{
return $this->hasMany(Sous_categorie::class, 'sous_categorie');
}
public function produits()
{
return $this->hasManyThrough(Produit::class, Sous_categorie::class);
}
}
Sous_Categorie.php
class Sous_categorie extends Model
{
public function categories(){
return $this->belongsTo(Categorie::class,'categorie_id','id');
}
public function produits(){
return $this->hasMany(Produit::class,'produit');
}
}
Produit.php
class Produit extends Model
{
public function souscategories()
{
return $this->belongsTo(Sous_categorie::class, 'sous_categorie_id', 'id');
}
}
我还添加了:
protected $fillable = [
'filenames',
'title',
'nom',
'sous_categorie_id',
'categorie_id',
'id',
'id'
];
我尝试做的是根据和ID从指定类别中获取所有产品,例如:
我有categorie
称为PC PARTS
和一个Sous_categorie
属于PC PARTS
有许多Produits
,我想检索。
我希望我的问题是明确的,提前感谢。
我尝试通过souscategories.categories
与categorie_id
之间的连接获取所有produits
,如下所示
$s_produits = Produit::with('souscategories.categories')->where('categorie_id','like','%'.$id.'%')->get();
我得到这个错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'categorie_id' in 'where clause' (SQL: select * from
produitswhere
categorie_idlike %1%)
如果我尝试这行代码:
$s_produits = Produit::with('souscategories.categories')->get();
它检索所有可用产品
enter image description here
我不想要我想要某个类别的所有产品
2条答案
按热度按时间2vuwiymt1#
我看到你想根据
souscategories
表中的categorie_id
过滤Produit
模型?您可以在with()
中添加约束:约束急切负荷在这里的参考。
qgelzfjb2#
我弄清楚了如何用一个表C和一个中间表连接表A和表B。所以我有表
categories
hasManysous_categories
hasManyproduits
我试图检索所有产品基于类别名称与此代码:它的工程罚款与156毫秒查询持续时间,如果我可以使它更简单,请告诉我。