2

次の問題が発生しました。タスク自体を挿入した人、またはタスクを担当している人のタックだけを表示したいのですが、このために、次のデータベーススキーマがあります。

テーブルFuncionario(従業員のテーブル)= ID、名前など..

テーブルTarefasGerais(タスクのテーブル)= id、id_funcionario(それを挿入した人)など...

テーブルTarefasResponsaveis(責任ある雇用者のテーブル)= id、id_tarefa(tarefas gerais id)、id_funcionario(従業員ID)

私のモデルの検索方法では、次のことを行いました。

    $criteria->with = array('Responsaveis' => 
        array('condition' => 'Responsaveis.id_funcionario = ' . Yii::app()->user->dados->id));
    $criteria->condition = 'id_funcionario_lancamento = ' . Yii::app()->user->dados->id;

ただし、次のSQLが生成されます。

    SELECT COUNT(DISTINCT `t`.`id`) FROM `tbl_tarefas_gerais` `t` LEFT OUTER JOIN `tbl_tarefas_gerais_responsaveis` `Responsaveis` ON
    (`Responsaveis`.`id_tarefa` = `t`.`id`) WHERE (id_funcionario_lancamento =
    3) AND (Responsaveis.id_funcionario = 3)

ご覧のとおり、「AND」演算子を使用していますが、whereセクションで「OR」演算子を使用する必要があります。

私は試した :

    $criteria->with = array('Responsaveis' =>
        array('condition' => 'Responsaveis.id_funcionario = ' . Yii::app()->user->dados->id, 'operator' => 'OR'));

しかし、それは何も変わりませんでした。

誰かがどのように対処するかについて何か考えを持っていますか?

乾杯0/

4

1 に答える 1

5

mergeWith2 つの基準を試してください。

ロジックを 2 つの基準に分割し、それらをマージする

$criteria->with = array('Responsaveis' => 
    array('condition' => 'Responsaveis.id_funcionario = ' . Yii::app()->user->dados->id));
$criteria2->condition = 'id_funcionario_lancamento = ' . Yii::app()->user->dados->id;
$criteria->mergeWith($criteria2);

完全な例:

$criteria2 = new CDbCriteria();
$criteria2->addInCondition('startDate', array(null));
$criteria2->addBetweenCondition('startDate', date('Y-m-d'), '1950-01-01', 'OR');

$criteria3 = new CDbCriteria();
$criteria3->addInCondition('stopDate', array(null), 'AND');
$criteria3->addBetweenCondition('stopDate', '1990-01-01', date('Y-m-d'), 'OR');

$criteria3->mergeWith($criteria2);
于 2013-03-14T16:47:31.070 に答える