gpt4 book ai didi

php - Laravel Eloquent 从多个相关表中获取数据

转载 作者:行者123 更新时间:2023-11-29 06:07:33 25 4
gpt4 key购买 nike

我有一个 deliveryForecast 模型,我必须创建一个 eloquent 来从基于 2 列的多个表中获取数据。

这是我的 delivery_forecasts 表

Schema::create('delivery_forecasts', function (Blueprint $table) {
$table->increments('id');
$table->enum('type',array('Quotation','Demo','Service Unit','Freebie','Back Job','Site Visit'));
$table->string('type_id');
$table->date('transaction_date');
$table->time('transaction_time')->nullable();
$table->enum('status',array('Pending','Approved','Cancelled'))->default('Pending');
$table->boolean('queue')->default(0);
$table->timestamps();
});

问题是我可以在模型中创建 eloquent 吗?或者如何制定条件?

例如:

class DeliveryForecast extends Model
{
public function documents(){
if(DeliveryForecast->type == 'Quotation'){
return $this->belongsTo('App\Quotation','type_id','id');
}
if(DeliveryForecast->type == 'Demo'){
return $this->belongsTo('App\Demo','type_id','id');
}
if(DeliveryForecast->type == 'Service Unit'){
return $this->belongsTo('App\ServiceUnit','type_id','id');
}
and so on .....
}
}

我不知道要创造 Eloquent 条件,我的查询应该是这样的:

$delivery_forecast = DeliveryForecast::with('documents')
->get();

有什么想法吗?提前致谢。

最佳答案

正如@Scopey 所说,看一下多态关系:https://laravel.com/docs/5.2/eloquent-relationships#polymorphic-relations

为了实现多态关系,您必须将迁移更改为以下内容:

    Schema::create('delivery_forecasts', function (Blueprint $table) {
$table->increments('id');
$table->morphs('type');
$table->date('transaction_date');
$table->time('transaction_time')->nullable();
$table->enum('status', ['Pending', 'Approved', 'Cancelled'])->default('Pending');
$table->boolean('queue')->default(0);
$table->timestamps();
});

然后将 DeliveryForecast 的方法更改为以下内容:

public function document()
{
return $this->morphTo('type');
}

仅此而已。但我强烈建议在 Your QuotationDemo 和其他模型中添加关系:

public function deliveryForecasts()
{
return $this->morphMany('App\DeliveryForecast', 'type');
}

当查询 $forecast->document 时,Laravel 将自动获取正确的模型,而无需任何其他条件子句。

关于php - Laravel Eloquent 从多个相关表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40519640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com