CakePHP中的$belongsTo关系的两张表,不以id字段关联时如何设置?

昆山人在上海 2011-03-02 05:24:27
如题
例如: Books 和 Authors两张表
表Books 字段有
id
book_name
isbn_no
author_cno(譬如身份证号码,注意这里不是authors_id字段去关联表Authors的id字段)
----------
表Authors 字段有
id
name
author_cno
----------
现在需要
Books Left join Authors on Books.author_cno = Authors.author_cno
请问在写两个model的时候怎么写?

现在发现,Book类如下写还是不能实现上诉要求(结果:Books.author_cno = Authors.id)
class Book extends AppModel {

public $name = 'Book';

public $belongsTo = array(
'Author' => array(
'className' => 'Author',
'foreignKey' => 'author_cno'
));
}
但是修改一下Author类的话可以实现:
class Author extends AppModel {

public $name = 'Author';

public $primaryKey = 'author_cno';
}
但是问题是Authors表真正的主键不是author_cno,仍然是id,请问如何解决?
...全文
338 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazysmile 2011-03-08
  • 打赏
  • 举报
回复

public $belongsTo = array(
'Author' => array(
'className' => 'Author',
'foreignKey' => false,
'conditions'=>array("Book.author_cno"=>"Author.author_cno")
));
}

daly2008 2011-03-04
  • 打赏
  • 举报
回复
那你在controller中

$options = array();
$options['joins'] = array(
array('table' => 'authors',
'alias' => 'Authors',
'type' => 'left',
'conditions' => array(
'Books.author_cno = Authors.author_cno'

)

));
$options['fields'] = array('Books.book_name','Authors.name');
$result = $this->Books->find('all',$options);



运行后的sqlCode
SELECT `Books`.`book_name`, `Authors`.`name` FROM `books` AS `Books` left JOIN authors AS `Authors` ON (`Books`.`author_cno` = `Authors`.`author_cno`) WHERE 1 = 1

昆山人在上海 2011-03-03
  • 打赏
  • 举报
回复
貌似Model里不关联不行的,光是增加$options,只会在生成的SQL的where后面增加这个条件
甚至SQL的From子句里都不会出现Author表。

除非你使用query方法:
$this->Book->query('select * from books Book, authors Author where Book.ip = Author.ip');

不知道还有没有别的方法,最好是能通过Model关联?
莫非还有CakePHP的Model没法实现的模型关联?
daly2008 2011-03-02
  • 打赏
  • 举报
回复
可以试试,别在model里关联
在action中用
$options = array();
$options['conditions'] = "Books.author_cno = Authors.author_cno";
$this->MODELNAME->find('all',$options);

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧