【问题标题】:Eloquent eager loading does not return related model dataEloquent 急切加载不返回相关模型数据
【发布时间】:2020-04-01 13:08:39
【问题描述】:

在我的 Laravel 项目中,我有两个 Eloquent 模型 SetCard,它们之间有一对多的关系。 Set 有很多 CardsCards 属于 Set

我正在尝试使用 with() 函数使用 Eloquent Eager Loading 提取数据。但由于某种原因,sets 中的 cards 数组返回为空白 []

Set.php

<?php

namespace App;
use App\Card;

use Illuminate\Database\Eloquent\Model;

class Set extends Model
{
    protected $table = "sets";

    public function cards() {
        return $this->hasMany('App\Card');
    }
}

Card.php

<?php

namespace App;

use App\Set;
use Illuminate\Database\Eloquent\Model;

class Card extends Model
{
    protected $table = "cards";

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

控制器代码

$sets = Set::with([
         'cards' => function($query){
         $query->select('name', 'description');
         },
       ])->get();

  return $sets;

namedescription 是我在Cards 表中的字段,除了主键和外键。

它在setsJSON 数组中返回"cards": []

我尝试在控制器中使用以下代码,

$sets = Set::with('cards.*')->get();

return $sets;

没用。

尝试在我的 Set 模型中的 hasMany 方法中添加外键(set_id 位于 Cards 表中),该模型与 Cards 表创建关系。但没有结果。

需要提及的是,当我尝试从CardController 中分别提取Cards 表中的数据时,它返回了所有Cards 数据。

一些线索将意味着很大的帮助。感谢您的宝贵时间。

【问题讨论】:

  • in tinker 取出卡片并检查 $card->sets 返回什么?
  • 异常消息“此集合实例上不存在属性 [sets]。” .这就是我得到的
  • ^ 这个错误对你发布的代码没有任何意义;你不会在任何地方打电话给-&gt;sets。请发布您的完整代码。此外,如果您遇到该错误,请确保您正在循环您的 Collection。您不能调用$cards-&gt;sets(如果$cardsCollection),但$card-&gt;sets(其中$card 是单个Card 实例)非常好。最后,您的关系名称应该代表返回的内容。 belongsTo返回1个Set模型,或者null,所以称它为sets(复数)是错误的,应该是set
  • 把它转错了 Set::all()->first()->cards ?
  • 你能多说一点吗? @mrhn

标签: php json laravel eloquent


【解决方案1】:

在您的控制器中尝试此代码,

$sets = Set::with('cards')->get();

return $sets;

让我知道它是否有效

【讨论】:

  • 乐于助人。 :-)
【解决方案2】:

试试这样的:

 public function sets() {
    return $this->belongsTo('App\Set','id','id_set');
}

第二个参数“id”是表Set的id,第三个参数“id_set”是卡表中的外键。

【讨论】:

  • 感谢您的回复。但仍然返回空白。也许我以前试过这个。
  • 尝试实例:$set = Set::find($id); $card = $set->card(); // 这里给出特定集合中的所有卡片
  • 是的,belongsTohasOne(或 hasMany)的第二个和第三个参数是可选的,只有在您使用与 Laravel 假定的列不同的列时才需要(id 代表主,@ 987654325@国外)
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多