我尝试使用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但是我只得到一张桌子而不是两张桌子。
答案 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();