提问人:MOHAMED KESSOUM 提问时间:6/25/2023 更新时间:6/26/2023 访问量:47
如何将两个表与中间表连接起来并收集数据?
How can I join Two Tables with and intermediate Table and gather data?
问:
我正在做一个项目,我需要使用来自 Laravel Doc Has Many Through 将数据从表 A 检索到表 C 的数据,并以表 B 为中间体。HasManyThrough
我有三个表 Categorie 和 Produit,这是 realtionship:Categorie
--> Hasmany Sous_Categorie
-->Hasmany
Produits
。Categorie
Sous
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
我希望我的问题很清楚,提前致谢。
我试图像这样加入关系produits
souscategories.categories
categorie_id
$s_produits = Produit::with('souscategories.categories')->where('categorie_id','like','%'.$id.'%')->get();
我收到此错误:SQLSTATE[42S22]:找不到列:1054 未知列“categorie_id”在“where clause”(SQL:从“produits”中选择 *,其中“categorie_id”,如 %1%)
如果我尝试以下代码:
$s_produits = Produit::with('souscategories.categories')->get();
它检索所有可用的产品
在这里
输入图片描述,我不想要我想要某个类别的所有产品
答:
我看到您想根据表中筛选模型?您可以在以下位置添加约束:Produit
categorie_id
souscategories
with()
use Illuminate\Contracts\Database\Eloquent\Builder;
Produit::with(['souscategories' => function (Builder $query) use ($id) {
$query->where("categorie_id","LIKE", %{$id}%);
}])->get();
约束 Eager Loads 在这里作为参考。
评论
我想出了如何将表 A 与表 B 与表 C 和中间表连接起来。
所以我有表有很多有很多我试图根据带有此代码的类别名称检索所有产品:categories
sous_categories
produits
public function show(Sous_categorie $sous_categorie, $id)
{
//
$s_produits = DB::table('produits')
->select('produits.*', 'sous_categories.categorie_id as laravel_through_key')
->join('sous_categories','sous_categories.id','=','produits.sous_categorie_id')
->whereIn('sous_categories.categorie_id',[$id])
->get();
}
它在 156 毫秒的查询持续时间下工作正常,如果我能让它更简单,请告诉我。
评论