php - Laravel 附加访问器意外地也添加了与响应的关系

标签 php laravel

感谢您花时间帮助我理解这个问题。

我有一个“车辆”类,如下所示: (为了保持简单,我删除了很多方法和可填充项)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

use App\Trip;

class Vehicle extends Model
{
    public $fillable = [
       ...
    ];

    protected $appends = [
        'LastTrip'
    ];

    public function trips()
    {
        return $this->hasMany(Trip::class);
    }

    public function getLastTripAttribute()
    {
        return $this->trips->last();
    }
}

问题是当我从 Controller 返回此类的实例时。 它将“行程”关系序列化,以便每次行程都在我的响应中。

但这仅在我尝试附加“LastTrip”访问器时才会发生。 如果我将其更改为以下内容,问题就不会持续存在

protected $appends = [
    #'LastTrip'
];

我只是想让它序列化“LastTrip”访问器。

我希望我清楚地说明了我的问题,如果我可以应用任何进一步的信息,请告诉我。

感谢您的帮助。

最佳答案

发生这种情况是因为您的访问者执行了以下操作:

  1. 加载完整的行程关系
  2. 将 trips 集合中的最后一项设置为 last_trip 属性。

将代码更改为以下内容:

public function getLastTripAttribute()
{
    // If the relation is already loaded, avoid doing an extra SQL query
    if ($this->relationLoaded('trips')) {
        return $this->trips->last();
    // Otherwise, get the last trip from an SQL query.
    } else {
        return $this->trips()->orderByDesc('id')->first();
    }
}

关于php - Laravel 附加访问器意外地也添加了与响应的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60346575/

相关文章:

php - 长时间运行的进程调试。斯特雷斯,布鲁克

php - 如何使用另一个表中的值从表中选择数据

php - CodeIgniter 中的 301 重定向有 ?问题

laravel - DataTables时刻按自定义格式排序

php - Redis缓存时报错 "Connection read timed out"

php - 用于计算每天订单总数的 SQL 查询?

php - 安装laravel家园错误

mysql - Laravel:将结果与 UnionAll 与计数相结合

php - 按特殊关系排序查询并分页

laravel - hasManyThrough 带有中间数据透视表