【问题标题】:Convert sql statement to cakephp statment将sql语句转换为cakephp语句
【发布时间】:2013-01-03 08:39:22
【问题描述】:

我用的是cakephp 2.1,写的sql语句如下。

SELECT * FROM industry
LEFT JOIN movie ON movie.industry_id = industry.id
LEFT JOIN (
        SELECT MAX(id) AS TID ,movie_id FROM trailer
        GROUP BY movie_id

      ) AS c ON c.movie_id = movie.id
LIMIT 0, 4;

其中行业是“行业”模型,电影是“电影”模型,预告片是“预告片”模型,我试过这个。

$options['joins'] = array(
        array(
            'table' => 'movies',
            'alias' => 'Movie',
            'type' => 'left',
            'conditions' => array('Industry.id = Movie.industry_id')), 
        array(
            'table' => 'movie_trailers',
            'alias' => 'Trailer',
            'type' => 'left',
            'conditions' => array('Trailer.movie_id = Movie.id')));

    $trailers = $this->Industry->find('all', $options);

所以请建议我将此语句转换为 cakephp 语句。

【问题讨论】:

  • 你有没有在网上搜索过这个?很多链接和资源...您还应该发布您的尝试。

标签: sql cakephp cakephp-2.1


【解决方案1】:

您的 SQL 是 joinsub query,而 Cake 代码仅是 join

您可以使用sub query,但我会寻找一种仅通过连接来实现的方法。

鉴于您的问题缺乏详细信息,我无法提供更好的查询。

【讨论】:

    【解决方案2】:

    很难说出您想要通过查询完成什么。但看起来您真正想要的是有关四个最新预告片的信息。

    既然如此,你总是可以把它全部扔到连接中:

    $records = $this->Industry->find('all', array(
        'fields' => array('Trailer.id', 'Industry.id', 'Industry.Name', 'Movie.id', 'Movie.name'),
        'limit' => 4,
        'joins' => array(
            array(
                'table' => 'movies',
                'alias' => 'Movie',
                'type' => 'LEFT',
                'conditions' => array(
                    'Movie.industry_id = Industry.id'
                ),
            ),
            array(
                'table' => '(SELECT MAX(id) As id, movie_id FROM trailers GROUP BY movie_id)',
                'alias' => 'Trailer',
                'type' => 'LEFT',
                'conditions' => array(
                    'Trailer.movie_id = Movie.id'
                ),
            ),
        ),
    ));
    

    由于在连接表中抛出查询,它会破坏 ORM 的可移植性,但它可以工作。

    这是另一个可能有用的问题:CakePHP and subquery

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-18
      • 2016-03-29
      • 1970-01-01
      • 2021-01-08
      • 2013-02-15
      • 2019-07-03
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多