更改Cakephp中的join contain()条件

更改Cakephp中的join contain()条件,cakephp,join,cakephp-2.0,cakephp-3.0,contain,Cakephp,Join,Cakephp 2.0,Cakephp 3.0,Contain,我尝试使用contain对两个表进行完全联接,但不知道如何更改条件: $select= $this->Friends->find('all') ->order(['Friends.id' => 'ASC']) ->contain([ 'Animals' ]) ->where(['animal1_

我尝试使用contain对两个表进行完全联接,但不知道如何更改条件:

$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

问题是这个朋友。动物2\u id我想和朋友一起改变。动物1\u id但我不知道如何改变?也许还有别的方法?我尝试使用join,但我只得到一个表,而不是两个表。

我认为您在两个模型朋友和动物之间有归属关系

因此,您只需更改关联中的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();

“animal1_id”和“confirm”列属于哪个表,朋友还是动物?@bikash.bilz到表中的朋友,我有“animal1_id”和“animal2_id”并已确认。当我使用contain时,他会自动将'animal2_id'作为join,但我需要'animal1_id'我还可以通过使用join找到另一种方法,谢谢您的帮助。您是否知道如何从表中选择*。。。如果我使用join the cakephp自动从第一个表中选择jut,如果我将$this->Tablename->find('all')…?@Christian Yes是解决您的问题的另一种方法,在查找中使用join。@Christian我不确定您想要实现什么,仍然使用ORM可以节省您的时间,因此最好使用ORM而不是使用原始查询。我正在添加一些代码来帮助您