首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用像素资源laravel将多个关系合并成一维数组?

如何利用像素资源laravel将多个关系合并成一维数组?
EN

Stack Overflow用户
提问于 2020-10-12 11:49:23
回答 1查看 172关注 0票数 1

关系的定义如下:

代码语言:javascript
复制
class Rfid extends Model
{
    use HasFactory;

    public function logs()
    {
        return $this->hasMany('App\Models\ComponentLog', 'rfid_id');
    }
}

class ComponentLog extends Model
{
    use HasFactory;

    public function reader()
    {
        return $this->belongsTo('App\Models\RfidReader','rfid_reader_id');
    }
}

class RfidReader extends Model implements AuthenticatableContract
{
    use HasFactory;
    use HasApiTokens;
    use Authenticatable;

    public function department()
    {
        return $this->belongsTo('App\Models\Department', 'department_id');
    }
}

在查询时,Rfid::with('logs.reader.department')->get()给出了如下结果:

代码语言:javascript
复制
App\Models\Rfid {#4554
         id: 13,
         RFID: "KDtCgimCJJ",
         department_id: 6,
         component_id: 13,
         created_at: "2020-10-12 10:48:32",
         updated_at: "2020-10-12 10:48:32",
         logs: Illuminate\Database\Eloquent\Collection {#4599
           all: [
             App\Models\ComponentLog {#4576
               id: 13,
               rfid_id: 13,
               check_in: "2020-10-12 10:48:32",
               check_out: null,
               rfid_reader_id: 4,
               created_at: null,
               updated_at: null,
               reader: App\Models\RfidReader {#4421},
             },
           ],
         },
       },...

然而,我希望它的关系被合并使用芹菜资源。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-12 14:00:44

步骤1:定义ComponentLog -> Rfid belongsTo关系

代码语言:javascript
复制
class ComponentLog extends Model
{
    use HasFactory;

    public function reader()
    {
        return $this->belongsTo('App\Models\RfidReader','rfid_reader_id');
    }

    public function rfid()
    {
        return $this->belongsTo('App\Models\Rfid', 'rfid_id');
    }
}

步骤2:从ComponentLog获得结果以避免hasMany关系

代码语言:javascript
复制
$logs = ComponentLog::with(['rfid', 'reader.department'])->get();

步骤3:映射结果

代码语言:javascript
复制
$logs->transform(function ($log) {
    return [
        'rfid' => $log->rfid->rfid,
        'department_name' => $log->reader->department->department_name,
        'rfid_reader_id' => $log->rfid_reader_id,
        'check_in' => $log->check_in,
        'check_out' => $log->check_out
    ];
});

你也可以内联.

代码语言:javascript
复制
$logs = ComponentLog::with(['rfid', 'reader.department'])
->get()
->transform(function ($log) {
    return [
        'rfid' => $log->rfid->rfid,
        'department_name' => $log->reader->department->department_name,
        'rfid_reader_id' => $log->rfid_reader_id,
        'check_in' => $log->check_in,
        'check_out' => $log->check_out
    ];
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64317310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档