繁体   English   中英

渴望加载一对多关系返回null

[英]eager loading return null on one to many relationship

我有三个表,它们的表名之间有很多关系:notes(id,user_id,card_id,body),Users(id,name,password,...),Card(id,cardname,cardText)现在我要使用紧急加载获取相关的用户名,我有三个模型,如下所示:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Card extends Model
{
    /*public $table= 'Fake';*/
    public $timestamps = false;
    public function notes()
    {
        return $this->hasMany(Note::class);
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Note extends Model
{

    public $timestamps = false;
    public function cards()
    {
        return $this->belongsTo(Card::class);
    }

    public function users()
    {
        return $this->belongsTo(User::class);
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public $timestamps = false;
    public function notes()
    {
        return $this->hasMany(Note::class);
    }

}

在我的路线中,我使用了以下内容:

<?php

use App\Card;
Route::get('/', function () {
    $card=new Card();
    $card->id=1;
    $card->load('notes.users')->all();
    return $card;
});

但我不知道为什么我在json中的用户中为null:json文件:

{
id: 1,
notes: [
{
id: 1,
card_id: 1,
user_id: 1,
body: "Hussein Jafari",
users: null
},
{
id: 2,
card_id: 1,
user_id: 1,
body: "Ammpeaa",
users: null
},
{
id: 12,
card_id: 1,
user_id: 1,
body: "KAIRIMI SANJABI",
users: null
},
{
id: 13,
card_id: 1,
user_id: 1,
body: "MOAHAHS KASK KSK",
users: null
},
{
id: 14,
card_id: 1,
user_id: 1,
body: "bENAJAJ KSAK KS",
users: null
}
]
}

您可以在Note类中将您的关系更改为:

public function users()
{
    return $this->belongsTo(User::class, 'user_id', id);
}

这是因为雄辩地通过检查关系方法的名称并在方法名称后缀_id来确定默认的外键名称。

但是在您的情况下,它正在寻找users_id列。

要么

您可以将关系名称更改为:

public function user()
{
    return $this->belongsTo(User::class);
}

然后渴望加载为:

$card->load('notes.user')->all();

文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM