【问题标题】:laravel eloquent with pivot and another tablelaravel 雄辩与枢轴和另一个表
【发布时间】:2020-10-26 11:06:55
【问题描述】:

我有 4 个表 categoriesinitiatives、一个用于“多对多”关系的数据透视表 category_initiativeinitiativegroup 与倡议表相关的 initiatives.initiativesgroup_id 与一对多关系。 使用纯 sql 检索我需要的信息:

SELECT categories.id, categories.description, initiatives.id, initiatives.description, initiativegroups.group
FROM categories
LEFT JOIN category_initiative ON categories.id = category_initiative.category_id
LEFT JOIN initiatives ON category_initiative.initiative_id = initiatives.id
LEFT JOIN initiativegroups ON initiatives.initiativegroup_id = initiativegroups.id
WHERE categories.id = '40'

如何使用 eloquent 模型来达到同样的效果?

【问题讨论】:

  • 您是否已经创建了模型类和它们之间的关系?
  • 是的,所有的平板电脑都正确。使用 nova 可以正确检索所有关系。

标签: laravel eloquent


【解决方案1】:

由于您有这样一个涉及多个表的特定查询,一种可能性是使用查询生成器。这将保持查询的精度,只检索您特别需要的数据。看起来像这样:

$categories = DB::table('categories')
            ->select([
                'categories.id',
                'categories.description',
                'initiatives.id',
                'initiatives.description',
                'initiativegroups.group',
            ])
            ->leftJoin('category_initiative', 'categories.id', '=', 'category_initiative.category_id')
            ->leftJoin('initiatives', 'category_initiative.initiative_id', '=', 'initiatives.id')
            ->leftJoin('initiativegroups', 'initiatives.initiativegroup_id', '=', 'initiativegroups.id')
            ->where('categories.id', '=', 40)
            ->get();

【讨论】:

  • 首先感谢!没有办法与雄辩的结果相同?我只想使用一种方式访问​​数据库...或者在这种情况下可能不是那么有效?
【解决方案2】:

在您的模型中定义关系: Category.php 模型

public function initiatives()
{
  return $this->belongsToMany('App\Initiative');
}

Initiative.php 模型(如果有多个类别更改为属于多个)

public function category()
{
  return $this->belongsTo('App\Category');
}

然后可能更改您的 Initiativegroup -> groups 表,然后创建一个名为 group_initiative 的数据透视表。为组创建模型。 Group.php 并定义关系:

public function initiatives()
{
  return $this->belongsToMany('App\Initiative');
}

那么你也可以在Initiative.php模型中添加如下关系定义

public function group()
{
  return $this->belongsTo('App\Group');
}

这应该让你开始。

【讨论】:

  • 感谢@alex!一切关系正常。倡议和类别表通过多对多关系链接,并且 witt: $category = Category::find($id_cat)->load('Initiative');我可以获得与所选类别模型相关的所有倡议模型。倡议表与组表中 id_group 的 belongsTo id 相关。但是如何在我的收藏中获取组描述?
  • $initiative->group->description
【解决方案3】:

记录.. 与我原来的关系,但在我的控制器中按照亚历克斯的建议更改表名:

$inits = Category::with('initiative.group')->find($id_cat);

简单干净

【讨论】:

    猜你喜欢
    • 2019-07-24
    • 2018-05-19
    • 2017-05-24
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多