'where' 条件在 has_many_through 在 kohana

'where' condition in has_many_through in kohana

我有两个模型疾病和症状:

生病

class Model_Illness extends ORM {

    //protected $_db_group = 'default2';
    protected $_table_name = 'illnesses';

    protected $_has_many = array(
        'symptoms' => array(
            'through' => 'symptoms_illnesses',
            'foreign_key' => 'illness_id',
        )
    );

症状

class Model_Symptom extends ORM {

    //protected $_db_group = 'default2';
    protected $_table_name = 'symptoms';
    protected $_has_many = array(
        'illnesses' => array(
            'through' => 'symptoms_illnesses',
            'foreign_key' => 'symptom_id',
        )
    );

逻辑是疾病可能有很多症状,症状可能有很多疾病。所以这两个有中间 table symptoms_illnesses 存储相互关联的疾病和症状的 ID。 最后是我的任务:我必须通过症状来寻找疾病。我在数组中发送症状 id,然后应该得到只有这些症状的疾病。我尝试了以下功能:

public function bySymp($symps){
        $res = array();

        $objs = ORM::factory('Illness')->join('symptoms_illnesses')
            ->on('symptoms_illnesses.illness_id', '=', 'illness.id');

        foreach($symps as $s){

             $objs = $objs->where('symptoms_illnesses.symptom_id', '=', $s);

         }


        foreach($objs->find_all() as $o){
            $res[] = $o;

        }

        return $res;
    }

它 returns 没什么,当我在数组中放置多个值时。我也试过 $objs = $this->where('symptom_id', 'IN', $symptom_ids); 它像 'OR' 条件一样工作,但我必须准确输出在症状 ID 数组中有症状的疾病。

我认为您需要进行多个联接,每个符号一个。但是快速浏览一下 Kohana 文档就会发现,它不允许在查询中使用别名,因此构造一个 WHERE 子句是 difficult/impossible.

我认为开箱即用的唯一方法是首先找到所有疾病,然后通过 has() 检查所需的症状。

$res = array();
$objs = ORM::factory('Illness')->find_all();
foreach ($objs as $o) {
    if ($o->has('symptom', $symps)) {
        $res[] = $o;
    }
}
return $res;

但我已经有一段时间没有使用 Kohana 了,可能会忽略一些东西。