INFORMATIONS
数据库
events | id | to_user_id | from_user_id |
event_details | id | event_id | when |
Event.php
class Event extends Eloquent {
protected $table = 'events';
public function event_detail() {
return $this->hasOne('EventDetail');
}}
EventDetail.php
class EventDetail extends Eloquent {
protected $table = 'event_details';
public function event() {
return $this->belongsTo('Event', 'event_id');
}}
问题
我希望得到所有事件(事件模型)并按相关EventDetail模型中的'when'列排序。我写了一个查询,它的确有效:
$event = Event::join('event_details as p', 'p.event_id', '=', 'event.id')
->orderBy('p.when', 'asc')
->select('events.*')
->with('event_detail')
->get();
但是当我想添加->where('to_user_id', '=', 0)
子句时,我会收到错误。 我该如何解决?
此外,我想知道如果这个查询在正确的做法中是正确的吗? 你能写得更好吗?
答案 0 :(得分:2)
好的,必须重新创建你的项目/表格 所有测试都运行正常,但我注意到你可能会考虑改变一些事情。
$events = Event::with(['event_detail'=> function($query) {
$query->orderBy('when', 'asc');
}])
->where('to_user_id', 0)
->get();
如果您有活动
,您的代码可能会更好public function event_detail(){
//considering you will have multiples? or just the one event detail?
return $this->hasMany('EventDetail');
}
正如您所看到的,我存储的一个事件有2个事件详细信息&他们都是由ASC订购的。
您可以使用不使用'with()'的其他方法,但我更喜欢它。非常适合json结果,你可以菊花链接很多相关的模型。
希望这有帮助
答案 1 :(得分:0)
我用这个查询解决了这个问题。我应该添加->where('events.to_user_id', '=', 0)
所以
$event = Event::join('event_details as p', 'p.event_id', '=', 'event.id')
->orderBy('p.when', 'asc')
->select('events.*')
->where('events.to_user_id', '=', 0)
->with('event_detail')
->get();
但是,我想知道这个查询是否正确并且有良好的做法? 你能写得更好吗?