我已经定义了这样的Eloquent模型:
class Order extends Eloquent {
public function station() {
return $this->belongsTo('Station');
}
}
class Station extends Eloquent {
public function client() {
return $this->belongsTo('Client');
}
public function orders() {
return $this->hasMany('Order');
}
}
class Client extends Eloquent {
public function stations() {
return $this->hasMany('Station');
}
}
现在我想做一个与所有这些相关的查询,但是我很难弄清楚如何以雄辩的方式去做。这是我想要返回的查询的SQL:
SELECT o.id, c.name AS cname, s.name AS sname, o.created, o.due, o.name, o.comments, o.points
FROM orders o
JOIN station s ON o.station_id = s.id
JOIN client c ON c.id = s.client_id
WHERE s.id IN (
SELECT id FROM orders WHERE complete
)
我对如何做Laravel / Eloquent方式感到困惑。
答案 0 :(得分:0)
嗯,这里有几种方法可以处理它。
要获得对查询的更多控制,我会得到第一点
这可以通过直接执行语句来实现
DB::select(DB::raw($your_sql_here))
;
或通过使用查询构造函数构建。
第二种方式涉及对关系如何运作的一些研究。 最终查询可能看起来像这样(不完全相同,但会给你一个提示):
Order::with('station.client')->whereIn('station.id', DB::raw('SELECT id FROM orders WHERE complete'))
希望这会有所帮助。还有一个很棒的cheet-sheet 可以为您提供比DB和Model对象更多的方法。
答案 1 :(得分:0)
您应该可以使用Eager Loading执行此操作:
$orders = Order::where('complete', $complete)->with('station.client')->get();
然后你可以遍历每个订单:
foreach ($orders as $order) {
echo e("The order ID is $order->id <br>");
echo e("The station ID is {$order->station->id} <br>");
echo e("The client ID is {$order->station->client->id} <br>");
}
希望有所帮助。