考虑这些模型:
飞行模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable =
[
'userID'
];
public function user()
{
return $this->belongsTo('App\User', 'userID');
}
}
用户模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable =
[
'userID', 'username', 'address'
];
}
当我尝试使用预先加载时,我想跳过一个专栏。我只是想知道IGNORE_FIELD FUNCTION之类的东西是否存在,所以我可以这样做:
$flightUser = Flight::with(['user', function ($q)
{
$q->ignoreField('user.address');
}])
我知道我可以将地址字段推入用户模型中的隐藏数组,
protected $hidden = ['address'];
或执行$q->select('fields')
并且不包括地址字段,但我真正怀疑的是laravel是否具有类似我上面输入的功能。
注意
我知道一个领域并不是那么重要。但我的问题是我真正问题的简化版本。
答案 0 :(得分:0)
我想我知道你得到了什么。您可以更改雄辩的关系,以便它永远不会加载该字段。
class Flight extends Model {
public function user()
{
return $this->belongsTo('App\User', 'userID')
->select(['userID', 'username']);
}
}
因此除了userID和username之外,关系永远不会加载任何内容。如果您想区分,您甚至可以拨打完整的user()
和有限的userName()
。
class Flight extends Model {
public function user()
{
return $this->belongsTo('App\User', 'userID');
}
public function userName()
{
return $this->belongsTo('App\User', 'userID')
->select(['userID', 'username']);
}
}