我需要在我的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):
1条答案
按热度按时间yqkkidmi1#
问题似乎是您根据表的结构定义了不正确的关系。你应该在你的
CsvExport
模型中定义一个关系belongsTo
,如下所示:这里假设您的
CsvExport
模型有一个名为batch_id
的外键列,它引用Batch
模型的主键列。然后,当你想检索一个
CsvExport
及其关联的Batch时,你可以使用with()
方法:基本上,如果
CsvExport
模型中的关系user
存在,它将与CsvExport
模型中的关系user
相同,因为外键存在于CsvExport
模型中,而不是Batch
模型中。