You are here

21 关联

admin 的头像
Submitted by admin on 星期五, 2015-06-05 06:37

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

    为了关联另一个数据库表,我们可以使用方法join()innerJoin()leftJoin()、或rightJoin(),下面的代码是一个具体示例:

<?php
$table_alias $query->join('user''u''n.uid = u.uid AND u.uid = :uid', array(':uid' => 5));
?>

    上述指令,将会对"user"表使用INNER JOIN(默认的关联类型),这里"user"表的别名为"u"。关联的条件为" n.uid = u.uid AND u.uid = :uid",其中:uid的值为5。注意,这里预备语句(prepared statement)片断的具体用法。采用这种方式,在关联语句中添加变量,就可以避免潜在的SQL注入了。即便是对于查询语句片断,也不要直接在里面使用字面值或者变量,这和静态查询中,不能使用字面值或者变量,性质是一样的。innerJoin()leftJoin()rightJoin()对应于各自的关联类型,除此以外,它们的用法完全相同。

    关联方法的返回值是对应表的别名。如果指定了别名,那么就会使用这个别名,除非这个别名已被其它表使用。在这种情况下,系统将会为其分配一个不同的别名。

    注意,在表名的位置上,比如上例中的'user'位置,所有的关联方法都可以接收一个选择查询作为它们的第一个参数。例如:

<?php
$myselect db_select('mytable')
  ->fields('mytable')
  ->condition('myfield''myvalue');
$alias $query->join($myselect'myalias''n.nid = myalias.nid');
?>


Drupal版本: