Laravel eloquent 仅在一个模型实例中使给定属性可见

Laravel eloquent make visible only given attribute in one instance of model

我有来自

的实例模型
$model = Model::find(1);

例如这个实例总是return这些属性(有些来自$append):

-id
-name
-countRelation
-description
-created_at
-updated_at

我想要的是只从这个实例中检索 namedescription

makeVisible 仅用于显示隐藏属性;我不想使用 makeHidden,因为如果在模型上添加新的追加属性,查找的结果可能会改变;

您可以使用 select 仅检索数据库中的某些列,它不会影响 append,请参阅文档了解更多信息 Eloquent

$model = Model::find(1);
// to this
$model = Model::select('name', 'description')->find(1);

有关从数据库中获取数据的更多信息,请参阅 Query Builder

如果您只检索 名称描述,那么您可以使用

$model = Model::select(['name', 'description'])->find(1);

您可以使用 select() 到 select 查询中的某些列。

$model = Model::select('name', 'description')->find(1);

https://laravel.com/docs/8.x/queries#specifying-a-select-clause

您还可以获取模型并在模型上使用函数。如果你只有一个模型,你可以使用 get().

$model = Model::find(1)->get('name', 'description');

如果你有 collection,你可以使用 ->map->only()。这将唯一函数映射为 Collection.

中每个模型的回调
$models = $models->map->only(['name', 'description']);

由于您要追加访问器,因此限制 SELECT 语句不会阻止将访问器追加到序列化输出。不过,您可以使用 setVisible 来执行此操作:

$model->setVisible(['name', 'description']);

以这种方式设置可见内容将限制在模型的序列化输出中返回的属性、追加和关系。