php Laravel自定义job_batches的Batch模型在hasOne上返回null

ljsrvy3e  于 2023-05-05  发布在  PHP
关注(0)|答案(1)|浏览(135)

我需要在我的CsvExport模型和一个批处理之间创建一个hasOne关系。我创建了一个Batch模型,它看起来像:

<?php

namespace App\Models;

use Illuminate\Bus\BatchRepository;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;

class Batch extends Model
{
    use HasFactory;

    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'job_batches';

    /**
     * Get the batch
     */
    public function toBatch()
    {
        return resolve(BatchRepository::class)->toBatch($this);
    }
}

然后在我的`CsvExport模型上创建了一个关系:

/**
 * Get the batch linked to this CSV export schedule
 */
public function batch(): HasOne
{
    return $this->hasOne(Batch::class, 'id', 'batch_id');
}

当我查询一个CsvExport时,batch键被添加,并且是null,尽管我的导出表的batch_id列中存在该批的UUID。如果我手动执行像CsvExport::find(1)->batch这样的操作,这将起作用,但我需要返回null的CsvExport::with('batch')->find(1)
我错过了什么?
以下是我的表格:
CsvExport:

作业批处理(Laravel):

yqkkidmi

yqkkidmi1#

问题似乎是您根据表的结构定义了不正确的关系。你应该在你的CsvExport模型中定义一个关系belongsTo,如下所示:

public function batch(): BelongsTo
{
    return $this->belongsTo(Batch::class);
}

这里假设您的CsvExport模型有一个名为batch_id的外键列,它引用Batch模型的主键列。
然后,当你想检索一个CsvExport及其关联的Batch时,你可以使用with()方法:

$csvExport = CsvExport::with('batch')->find(1);

基本上,如果CsvExport模型中的关系user存在,它将与CsvExport模型中的关系user相同,因为外键存在于CsvExport模型中,而不是Batch模型中。

相关问题