【问题标题】:Querying database with laravel eloquent relationship使用 laravel eloquent 关系查询数据库
【发布时间】:2021-03-21 12:25:18
【问题描述】:

我的控制器中有以下查询,这在不使用关系模型的情况下工作得很好。

        $menuitems = Menuitems::select(['item_id','item_name','item_price', 'item_code', 'item_status', 'menu_group_name'])
                               ->join('menu_item_groups', 'menu_items.itemgroup_id', '=', 'menu_item_groups.menu_group_id')
                               ->get();

现在我尝试使用关系,我在 Menuitems 模型中定义了以下关系,因为每个菜单项都属于 Menuitemgroup

之一
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;


class Menuitems extends Model
{
    use HasFactory;

    protected $table = 'menu_items';
    protected $primaryKey = 'item_id';

    public function menuitemgroup()
    {
        return $this->belongsTo(Menuitemgroups::class, 'menu_group_id', 'itemgroup_id' );
    }
    
}

现在我想运行与 join 相同的查询,但找不到正确运行的代码,menu_group_name 是另一个表 Menuitemgrous 的一部分,该表的 id 为menu_group_id

我将 $menuitems 作为 json 传递给数据表。

如何查询$menuitems?

【问题讨论】:

  • 您需要定义关系的双方。 Menuitems 模型也需要定义一个 hasMany

标签: laravel eloquent relationship


【解决方案1】:

使用 Eloquent 和 Laravel 关系,你可以试试下面的

$menuitems = Menuitems::with('menuitemgroup')
  ->get()
  ->map(function($item){
      $value = $item->menuitemgroup->menu_group_name;
      unset($item->menuitemgroup);
    
      $item->menuitemgroup = $value;
    
      return $item;
            
  });

顺便说一句,您还应该在 Menuitemgroup 上定义反向关系

//App\Models\Menuitems.php
public function menuitemgroup()
{
    return $this->belongsTo(Menuitemgroups::class, 'itemgroup_id', 'menu_group_id' );
}


//App\Models\Menuitemgroups.php
public function menuitems()
{
    return $this->hasMany(Menuitems::class, 'itemgroup_id', 'menu_group_id');
}

【讨论】:

  • 我收到此错误消息:“调用模型 [App\Models\Menuitems] 上的未定义关系 [menuitemgroup]。”
  • 检查您是否在 Menuitem 类中定义了关系
  • 已经在同一个类中定义了,但仍然是同样的错误。甚至还添加到 Menuitemgroup 模型中。
  • 尝试使用 with('menuitemgroup') 不过滤列作为更新的答案,如果您最近添加了模型类,那么也运行composer dump-autoload
  • 同样的问题,错误没有变化,无论什么原因,找不到关系函数
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 2013-10-03
  • 2017-07-19
  • 2021-09-25
  • 2015-01-21
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多