laravel - 将参数传递给 laravel Eloquent api 资源构造函数

标签 laravel eloquent laravel-6

我如何将 args 传递给 Laravel Eloquent API Resources 构造函数并将其获取到响应时返回的条件数据?

我尝试了什么:

Controller

$user = User::find(1);
return new UserResource($user, $shortData = true);

API 资源:

public function toArray($request, $shortData)
{
    if($short) {
        return $shortData;
    } else {
        return $fullData;
    }
}

最佳答案

你必须做这样的事情:

  • 在您的构造函数中添加条件数据(就像您所做的那样)。此条件数据可以为空:
$user = User::find(1);
return new UserResource($user, $conditionalData);
  • 然后在您的 UserResource 中,将条件数据添加为私有(private)属性,并像这样将其添加到您的构造函数中(它也适用于 PHP 默认参数值...):
private $conditionalData;

    public function __construct(User $resource, ?string $conditionalData)
    {
        parent::__construct($resource);
        $this->conditionalData = $conditionalData;
    }
public function toArray($request)
    {
        return [
            'data_1' => $this->data1,
            'data_2' => $this->data2,
            'conditional_data' => $this->when(!is_null($this->conditionalData), $this->$conditionalData)
        ];
    }

仅当属性不为空时,您的条件数据才会出现在您的响应中。

关于laravel - 将参数传递给 laravel Eloquent api 资源构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60408176/

相关文章:

php - Laravel:电子邮件验证

php - Laravel 5.2 - 获取日志事件的当前行

php - 将原始 SQL 查询更改为 Laravel 查询生成器对象

php - 从 "Fat model, skinny controller"的角度使用 Laravel Eloquent ORM 的做法是什么?

php - Laravel 在创建具有两个时间戳列的表时出错

elasticsearch - 如何创建一个记录到特定 Elasticsearch 索引的 Laravel Logger?

Laravel - 显示传递给 View 的消息数据

php - 返回 token 的 JWT_Auth 对于 getPayload 是必需的,即使提供了一个

php - 如何使用 laravel 在 MySQL 中通过将两个列值合并为一列来更新列

php - 如何在 Laravel 中基于用户显示数据列表