laravel 我如何连接两个表和中间表并收集数据?

sauutmhj  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(98)

我正在做一个项目,我需要使用Laravel Doc Has Many Through中的HasManyThrough从表A到表C检索数据,表B作为中间体。
我有三个表CategorieSous * CategorieProduit,这是关系:
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.categoriescategorie_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 * fromproduitswherecategorie_idlike %1%)

如果我尝试这行代码:

$s_produits = Produit::with('souscategories.categories')->get();

它检索所有可用产品
enter image description here
我不想要我想要某个类别的所有产品

2vuwiymt

2vuwiymt1#

我看到你想根据souscategories表中的categorie_id过滤Produit模型?您可以在with()中添加约束:

use Illuminate\Contracts\Database\Eloquent\Builder;

Produit::with(['souscategories' => function (Builder $query) use ($id) {
    $query->where("categorie_id","LIKE", %{$id}%);
}])->get();

约束急切负荷在这里的参考。

qgelzfjb

qgelzfjb2#

我弄清楚了如何用一个表C和一个中间表连接表A和表B。所以我有表categories hasMany sous_categories hasMany 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毫秒查询持续时间,如果我可以使它更简单,请告诉我。

相关问题