【问题标题】:How to get data for one to many relationship using Eloquent in Laravel?如何在 Laravel 中使用 Eloquent 获取一对多关系的数据?
【发布时间】:2017-12-01 19:24:35
【问题描述】:

如何在 Laravel 中使用 Eloquent 获取一对多关系的数据?实际上我关注了Eloquent Documentation。但是我的代码返回了一个空数组。这是我的工作:

数据库架构

父表:mtg_workspace 包含列(mw_id[主键]、mw_name、...、mw_access)

子表:mtg_workspace_amenities 包含列(id[主键]、wa_mwid、wa_name)

型号:MtgWorkspace.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class MtgWorkspace extends Model
{
  protected $table = 'mtg_workspace';
  public $timestamps = false;

  public function MtgWorkspaceAmenities(){
    return $this->hasMany('App\MtgWorkspaceAmenities', 'wa_mwid');
  }
}

型号:MtgWorkspaceAmenities.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class MtgWorkspaceAmenities extends Model
{
  protected $table = 'mtg_workspace_amenities';
  public $timestamps = false;

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

控制器:WorkspaceController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\MtgWorkspace;
use App\MtgWorkspaceAmenities;

class WorkspaceController extends Controller
{
    public function index()
   {
      $workspace = MtgWorkspace::with('MtgWorkspaceAmenities')->get();

      return $workspace;
    }
}

这里显示以下输出:

【问题讨论】:

    标签: php laravel laravel-eloquent


    【解决方案1】:

    您能否尝试为MtgWorkspace 模型定义主键(因为它不是id):

    protected $primaryKey = 'mw_id';
    

    我认为它不能将子 MtgWorkspaceAmenities 匹配到父 MtgWorkspace 模型,因为它试图使用 MtgWorkspace 上的 id 属性来匹配 MtgWorkspaceAmenities 上的外键时它通过急切加载的结果旋转。

    旁注:

    在定义它时,您必须将更多参数传递给 MtgWorkSpaceAmenities 上的反比关系,因为 belongsTo() 想要使用调用方法名称蛇,如果没有另外告知,则添加 _id 作为键。

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多