【发布时间】:2018-08-14 11:33:20
【问题描述】:
我正在创建报价。我的表格看起来像这样:
quote:
PK:id
name
FK:client_id
FK:user_id
created_at
quoteSkus:
PK:id
FK:quote_id
FK:sku_id
price
sku:
PK:id
name
created_at
我的人际关系是这样的:
Quote.php
public function skus(){
return $this->hasMany('\App\Http\Models\Quotesku','quote_id','id');
}
public function client(){
return $this->hasOne('\App\Http\Models\Client', 'id','client_id');
}
public function contact(){
return $this->hasOne('\App\Http\Models\Contact', 'id','contact_id');
}
QuotaSkus.php
public function sku(){
return $this->hasOne("\App\Http\Models\Sku","id","sku_id");
}
public function quote(){
return $this->hasOne("\App\Http\Models\Quote","id","quote_id");
}
sku.php
public function lastUsage(){
return $this->hasOne('\App\Http\Models\Quotesku','sku_id','id');
}
我想获得此客户上次报价中为此 sku 设置的价格。
这个查询会告诉我:
SELECT *
FROM `skus` as s
RIGHT JOIN quoteskus as qs on qs.sku_id = s.id
RIGHT JOIN quotes as q on q.id = qs.quote_id
where s.id = 236
AND q.client_id = 2
order by q.created_at DESC
是否可以用雄辩的关系来建立这个关系? 这样我就可以了
$sku = new Sku();
$sku->find(1);
$sku->lastUsage->price;
或
$sku->lastUsage(client_id)->price;
抱歉代码转储,我尽力总结了。
任何建议都会有所帮助。谢谢你:)
【问题讨论】:
-
模型一般放在app目录下,app\http目录一般用于控制器和中间件。你确定你的模型放在 app\http\models 里吗?
-
您是否尝试将
->orderBy('created_at', 'desc')添加到您的lastUsage*()方法中? -
@NIKHILNEDIYODATH 是的,这是我的第一个 Laravel 项目,所以我不确定将模型文件放在哪里。这种设置有效,只是不够优雅。
-
@i-- 表
quotesku没有created_at列。我不想保存这些数据,因为它已经保存在quote表中。 -
“你必须使用 php artisan 命令制作模型”@NIKHILNEDIYODATH 不,你没有有。你应该?可能,但是将现有模型复制到另一个模型,重命名类和文件并使用并没有错。
标签: php database laravel eloquent relationship