【问题标题】:Cakephp find order by an associated modelCakephp 通过关联模型查找订单
【发布时间】:2013-09-21 20:49:06
【问题描述】:

花了几个小时为以下问题找到解决方案后,我希望您能帮助我。

我有两张桌子:

Event hasmany Appointments and Appointment belongsto Event

现在我在我的EventsController 中表演:

$this->Event->find('all')

现在我想按预约订购活动。使最早约会的事件在数组中排在第一位,依此类推。我尝试了很多方法,包括 Containable、Join、Grouping、Subselects,但没有任何效果。

$this->Event->Appointment 上执行 find('all') 并不是一个解决方案,因为我希望每个 Event 都只是一个。

编辑#1: 到目前为止,我唯一的解决方案是 $events = $this->Event->find('all', array( '加入' => 数组( 大批( 'table' => '(SELECT event_id, MIN(start) 从约会开始 GROUP BY event_id)', '别名' => '约会', '类型' => '左', '条件' => 数组( 'Event.id = Appointment.event_id' ) ) ), '订单' => 数组( 'Appointment.start ASC' ) ));

但这不是最好的解决方案!

【问题讨论】:

    标签: group-by sql-order-by left-join cakephp-2.3


    【解决方案1】:

    一个选项是创建一个虚拟字段,表示您可以排序的最早约会日期

    把它放在你的事件模型中:

    function __construct($id = false, $table = null, $ds = null) {
        $this->virtualFields['firstappt'] = 'SELECT MIN(Appointment.created) FROM appointments AS Appointment WHERE Appointment.event_id = Event.id';
        parent::__construct($id, $table, $ds);
    }
    

    您应该可以在控制器中使用此代码:

    $this->Event->find('all',array('order' => array('firstappt')));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多