2

我最近开始了一个使用 Yii 的项目,我正在尝试习惯查询构建器。现在,我想使用联接进行查询并在查询中访问联接表的数据,但我无法使以下工作:

我的(简化的)数据库表:

客户(#id,姓名)
员工(#id,姓名)
customer_employee(#customerid,#employeeid)
会计(#id,customerid,started_date,finished_date,月,年)

  • 客户与员工之间的多对多关系
  • 客户与会计之间的一对多关系

我想执行以下查询,它将选择与某个员工关联的所有客户,并在适用的情况下显示他们的会计状态(started_date 和 finished_date)(否则为 null)。

以下查询完美运行,只是我无法让它与 cdbcriteria 和 Yii 查询构建器一起使用:(此外,硬编码的 id 仅用于此示例)

SELECT name, started_date, finished_date
FROM customer
RIGHT JOIN customer_employee ON customer.id=customer_employee.customerid
LEFT JOIN accounting ON customer.id=accounting.customerid
WHERE customer_employee.employeeid=2';

请帮忙!

4

4 回答 4

5

1.创建命令

Yii::app()->db->createCommand()
  ->select('name, started_date, finished_date')
  ->from('customer c')
  ->rightJoin('customer_employee ce', 'c.id=ce.customerid')
  ->leftJoin('accounting a', 'c.id=a.customerid')
  ->where('ce.employeeid=:id', array(':id'=>2))
  ->queryRow();

2. CdbCriteria

$criteria = new CDbCriteria;
$criteria->select    = 'name, started_date, finished_date';
$criteria->join      = 'RIGHT JOIN customer_employee ON customer.id=customer_employee.customerid ';
$criteria->join     .= 'LEFT JOIN accounting ON customer.id=accounting.customerid';
$criteria->condition = 'customer_employee.employeeid=:id';
$criteria->params    = array(':id'=>2);

$customers = Customers::model()->find($criteria);

*。不要忘记规则:http ://www.yiiframework.com/doc/guide/1.1/en/database.arr

我没有测试你的 SQL,但如果对你有用,这些应该也可以在 Yii 中工作。

于 2013-02-08T14:17:44.770 回答
2
$criteria = new CDbCriteria(); 
$criteria->select = "name, started_date, finished_date"; 
$criteria->join = "RIGHT JOIN customer_employee ON customer.id=customer_employee.customerid  LEFT JOIN accounting ON customer.id=accounting.customerid"; 
$criteria->condition = "customer_employee.employeeid=2"; 

$models = Customer::model()->findAll($criteria);

这是使用表 customer_employee 的命令获取数据的方法

foreach($model as $value)
        {

        }
于 2012-10-19T06:34:23.713 回答
1

今天有点晚了,但请参阅我的博客上的这篇文章,它解决了这种困难的子查询样式 SQL 的两个部分。

首先,建立一个依赖于其他模型属性的搜索其次,简单地使用相关模型,而不使用完整的 Yii AR 模型

http://sudwebdesign.com/yii-parameterising-a-sub-select-in-sql-builder/932

于 2012-11-06T17:04:24.970 回答
0

我还没有运行它,但是您需要以下类似的东西

$criteria = new CDbCriteria(); 
$criteria->select = "name, started_date, finished_date"; 
$criteria->join = "RIGHT JOIN customer_employee ON customer.id=customer_employee.customerid  LEFT JOIN accounting ON customer.id=accounting.customerid"; 
$criteria->condition = "customer_employee.employeeid=2"; 

$models = Customer::model()->findAll($criteria);
于 2012-06-13T13:34:13.380 回答