首页 > 解决方案 > 使用 laravel eloquent 关系查询数据库

问题描述

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

        $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' );
    }
    
}

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

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

如何查询$menuitems

标签: laraveleloquentrelationship

解决方案


使用 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');
}

推荐阅读