【发布时间】:2014-02-06 20:23:32
【问题描述】:
谁能帮我解决以下问题。
我有一个包含邮政编码列和评级列的表格,即。
ID | POSTCODE | RATING
1 | sk101dd | E
2 | sk101de | A
3 | sk101df | E
4 | sk101dg | E
5 | sk101dh | D
etc
这被设置为一个名为 PostcodeList 的模型
我有一个关系表,通过包含客户 ID 和成本的 RATING 列链接,即。
ID | CUSTOMER_ID | RATING | COST
1 | 1234 | E | 0.05
2 | 9999 | E | 0.02
这被设置为一个名为 RatingCost 的模型。我使用以下代码将其链接到 PostcodeList 模型:
public function costing()
{
return $this->hasMany('PostcodeList','RATING','RATING');
}
我需要使用 CUSTOMER_ID 作为过滤器从 RatingCost 模型中返回 COST,而不使用多个 sql 语句。我想我已经差不多了,使用下面的代码,但它不太正确:
$p = PostcodeList::where('postcode',$somepostcode)->first();
$cost = $p->costing()->where('customer_id',$somecustomerid)->first()->cost;
我目前遇到的错误是“尝试获取非对象的属性”。
非常感谢任何帮助。我不想求助于 DBRAW 或其他形式的连接,因为我真的很喜欢 Laravel 提供的关系设置。
谢谢
【问题讨论】:
-
您似乎收到了错误,因为邮政编码没有 customer_id 列。您还应该将其标记为 php
-
感谢您的回复。 postcode 表不存储任何客户 id,只有 RatingCost 表保存这一点,因为将有多个不同的客户 id 链接到相同的评级但具有不同的成本。所以我可能向 Laravel 错误地解释了这一点,但无法找出正确的代码
-
这更有意义。那么为什么要迭代邮政编码列表以匹配客户 ID?我不熟悉 DBRAW,但 laravel 确实在这里实现了自己的连接:laravel.com/docs/queries#joins
-
我需要搜索 PostcodeList 以找到输入的邮政编码 ($somepostcode)。实际上我可以简化,因为我不需要使用 get(),只需使用 first()。现在将修改那一点。