在Cakephp中更改join contains()条件

时间:2018-02-10 22:47:55

标签: cakephp join cakephp-2.0 cakephp-3.0 contain

我尝试使用contains来完成2个表的连接,但我不知道如何更改条件:

$select= $this->Friends->find('all')
                ->order(['Friends.id' => 'ASC'])
                ->contain([
                    'Animals'
                ])
                ->where(['animal1_id'=> $animalsid,
                    'confirmed'=>'1'
                ]);
            $this->set(compact('select'));

所以看看SQL:

 SELECT 
  * 
FROM 
  friends Friends 
  INNER JOIN animals Animals ON Animals.id = (Friends.animal2_id) 
WHERE 
  (
    animal1_id = 4 
    AND confirmed = 1
  ) 
ORDER BY 
  Friends.id ASC

问题是这个 Friends.animal2_id 我想用 Friends.animal1_id 进行更改,但我不知道怎么做?也许有另一种方法?我尝试使用join但是我只得到一张桌子而不是两张桌子。

1 个答案:

答案 0 :(得分:1)

我正在考虑您在两个模型朋友动物之间存在 belongsTo 关系。

因此,您只需更改关联中的foreignKey名称,因此请更新好友模型中的关联,例如

$this->belongsTo('Animals', [
    'foreignKey' => 'animal1_id',  //Here the column name you want to use for join
    'className'=>'Animals',
    'joinType' => 'INNER'
]);

编辑(评论查询): - 如果要选择其他表,可以通过两种方式实现此目的

在控制器中

$this->loadModel('OtherModelName');   //This will load your model to $this object
$other_table_result = $this->OtherModelName->find('all')->toArray();

使用原始SQL查询的方法

$sql = "SELECT * FROM users"; 
$query = $this->connection->prepare($sql); 
$query->execute(); 
$result = $query->fetchAll();