我有三张桌子,有很多种关系 表名: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
}
]
}
答案 0 :(得分:2)
您可以在Note
课程中将您的关系更改为:
public function users()
{
return $this->belongsTo(User::class, 'user_id', id);
}
这是因为eloquent通过检查关系方法的名称并使用_id
为方法名称添加后缀来确定默认外键名称。
但在您的情况下,它正在寻找users_id
列。
OR
您可以将关系名称更改为:
public function user()
{
return $this->belongsTo(User::class);
}
然后急切加载:
$card->load('notes.user')->all();