0

次のSQLクエリがあります

SELECT 
    i.id, 
    i.title, 
    i.slug, 
    i.date_added as date_added,
    a.slug as area_slug, 
    COUNT(o.id) as offers, 
    COUNT(v.item_id) as total_item_views
FROM 
    `item` `i`
LEFT JOIN 
    `offer` `o` 
ON 
    i.id=o.item_id
LEFT JOIN 
    `viewed_item` `v` 
ON 
    i.id=v.item_id
INNER JOIN 
    `a` `a` 
ON 
    a.id=i.area_id
WHERE 
    j.id=3

PHPMyAdmin 内で正常に動作します。Yiiに変換したので、次のようになります。

        $cmd = Yii::app()->db->createCommand();
    $cmd->select(array('i.id, i.title, i.slug, i.date_added as date_added, a.slug as area_slug, COUNT(o.id) as offers, COUNT(v.item_id) as total_item_views'));
    $cmd->from('item as i');
    $cmd->leftJoin('offers as o', 'i.id=o.item_id');
    $cmd->leftJoin('viewed_item as v', 'i.id=v.item_id');
    $cmd->join('area as a', 'a.id=i.area_id');
    $cmd->where('i.id=:id', array(':id'=>$id));

    $basicStatModel = $cmd->query();

これは、「viewed_item」テーブルに、このクエリに使用されている $id 値と等しいレコードがある場合にうまく機能します。現在、viewed_item には 2 つのレコードしかありませんが、item テーブルには複数のレコードがあります。私は自分のスタックを見ていますが、これを示しています:

ViewedItem.findByPk()

SQL のクエリ: SELECT * FROM viewed_item tWHERE tid='3' リミット 1

現在、そのテーブルには 3 に等しい ID はありません。そのため、ページ エラーが発生したと推測しています。しかし同時に、なぜそのテーブルで ID 値を探しているのかわかりません。findByPK() メソッドを使用していることがわかります。ただし、SQL ステートメントで本質的に FK を見つけるように依頼しました。

この問題を解決するにはどうすればよいですか? SQL が PHPMyAdmin 内で機能することがわかりました。

4

1 に答える 1