cakephp - 从其他表中获取行
Posted
技术标签:
【中文标题】cakephp - 从其他表中获取行【英文标题】:cakephp - get rows from other table 【发布时间】:2013-11-19 12:42:42 【问题描述】:在 moviesController 中,我有一个公共函数 add(),它通常需要处理 Movies 表中的数据。 (例如我可以做 $this->Movie->findById($id); 或 $this->Movie->save(); )
在添加视图中,我有一个表单,它接受用户的输入并将其保存到数据库中。 一切正常。
但我想稍微改变一下这个表格,所以会有一个类型列表(动作、喜剧等),用户可以选择其中的许多类型。 现在我只有一个包含类型值的数组,用于填充复选框,但我需要从表中获取这些值。
所以我要问的问题是,在公共函数 add() 中从 moviesController 中的其他表类型获取行的方法是什么,以便我可以在仍然使用主表的同时填充表单列表?
【问题讨论】:
【参考方案1】:在您的电影控制器中:
<?php
class MoviesController extends AppController
// here you select wath models you want to use
public $uses = array("Movie", "Genre");
public function add()
// Here you get genre list ids and names
$genreList = $this->Genre->find("list", array());
我希望这会有所帮助。
【讨论】:
是的,我知道关联并且我一般都在使用它们,但就在这种情况下,我认为我不需要它们,因为它是如此简单。是否可以在 Controller 中更改 $hasMany?因为我只是试图将 'Genre' => array('className' => 'Genre') 添加到电影模型中现有的 $hasMany 中,它对于特定视图非常有用:) 但遗憾的是,网站上的所有其他内容都与MovieController 崩溃了:D 导致它报告“未找到列等”错误 现在好点了吗?还是我不明白? Oups 我正在回复您之前的评论。天哪,是的,这个“$public uses ...”有效!谢谢你:) 我假设Movie
和Genre
以某种方式关联,在这种情况下您可以简单地使用$this->Movie->Genre->find('list');
。【参考方案2】:
如果您的Movies
模型与Genre
有任何关系,您可以这样做:
$this->set('genre', $this->Movie->Genre->find('list'));
在你看来,你可以这样做(伪代码):
<?php
echo $this->Form->input('Movie.Genre', array(
'options' => $genre,
'type' => 'select',
'multiple' => 'checkbox',
'class' => '',
'label' => array('class' => 'control-label', 'text' => "Genre:"),
'after' => ''
));
?>
更新:
当然Movie
应该与Genre
有has_many 关系。
【讨论】:
为此,您应该添加 hasMany 或属于您的电影模型 :) book.cakephp.org/2.0/en/models/… @GonzaloBahamedez,无论如何,我会添加它:) 感谢您的回复。但是如果这两个表没有任何关系呢? :) Table Genres 是一个孤独的表,只有一个值列表,没有外键...... 不管你是否有外键,Cake php 都会为你使用有很多和属于的,但每次都最好使用外键。从 cakephp 文档中读取 hasMany 和 belogsTo 指令。 @Marko,你应该拥有它们。如果你有一部与类型相关的电影没有foreign keys
,那会很奇怪。以上是关于cakephp - 从其他表中获取行的主要内容,如果未能解决你的问题,请参考以下文章