忽略 select Laravel Eloquent 中的字段
Ignore field in select Laravel Eloquent
考虑这些模型:
飞行模型
<?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 是否具有我上面键入的功能。
注意
我知道一个领域没什么大不了的。但我的问题是我真实问题的简化版本。
我想我明白你的意思了。您可以更改 eloquent 关系,使其永远不会加载该字段。
class Flight extends Model {
public function user()
{
return $this->belongsTo('App\User', 'userID')
->select(['userID', 'username']);
}
}
因此该关系永远不会加载除用户 ID 和用户名之外的任何内容。如果你想区分,你甚至可以称完整的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']);
}
}
考虑这些模型:
飞行模型
<?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 是否具有我上面键入的功能。
注意
我知道一个领域没什么大不了的。但我的问题是我真实问题的简化版本。
我想我明白你的意思了。您可以更改 eloquent 关系,使其永远不会加载该字段。
class Flight extends Model {
public function user()
{
return $this->belongsTo('App\User', 'userID')
->select(['userID', 'username']);
}
}
因此该关系永远不会加载除用户 ID 和用户名之外的任何内容。如果你想区分,你甚至可以称完整的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']);
}
}