我想知道我们如何在MVC框架中使用它,特别是CakePHP。
$query = oci_parse($c, "SELECT * FROM JOB ORDER BY job_title");
oci_execute($query);
while($row = oci_fetch_assoc($query)){
$showRowJ .= "<tr>\n";
$showRowJ .= "<td><a href = 'job_delete.php?jobid=".$row['JOB_ID']."'> Delete </a></td>\n";
$showRowJ .= "<td><a href = 'job_update.php?jobid=".$row['JOB_ID']."'> ".$row['JOB_ID']." </a></td>\n";
$showRowJ .= "<td>".$row['JOB_TITLE']."</td>\n";
$showRowJ .= "<td>".$row['REQUEST_DATE']."</td>\n";
$showRowJ .= "<td>".$row['START_DATE']."</td>\n";
$showRowJ .= "<td>".$row['NUMBER_OF_DAYS']."</td>\n";
$showRowJ .= "<td>".$row['STATUS']."</td>\n";
$showRowJ .= "<td>".$row['CLIENT_ID']."</td>\n";
$showRowJ .= "</tr>\n";
}
如果是MySQL :(示例)
$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
我很困惑,有人说它应该在模型中,有些人正在使用find('all')
更新:
嘿抱歉我的意思是当我们想查询联合表时。以上只是我们需要包含WHERE 2-3次连接表的示例。
假设我想查询:
SELECT users.name, foods.name FROM users, foods WHERE users.id='1' AND users.id=foods.id
像上面那样..我们应该如何在CakePHP中做到这一点?
感谢。
答案 0 :(得分:2)
由于Cake包含一个完整的数据库抽象层,因此根本不会编写任何类型的SQL。您可以正确设置模型,然后按照以下方式设置模型:
<强>控制器强>
$jobs = $this->Job->find('all', array('order' => array('Job.title' => 'asc')));
$this->set(compact('jobs'));
查看强>
<table>
<?php foreach ($jobs as $job) : ?>
<tr><?php echo htmlentities($job['Job']['title']); ?></tr>
...
<?php endforeach; ?>
</table>
也许你应该关注the tutorial。 :)
答案 1 :(得分:2)
CakePHP将为您完成所有SQL,您需要做的就是加载模型,如果使用MVC设置并且您在正确的控制器中,您将自动将其设置为$ this。
// Get jobs and assign them to a var.
$jobs = $this->findAllByUserId($id, array('order' => 'job_title');
// Send the var to the view.
$this->set(compact($jobs));
其中findAllByUserId($id)
表示“查找user_id = $ id的所有行”。
然后在视图中循环浏览$jobs
。只要您在模型中使用$hasOne, $belongsTo
等正确定义了关系,Cake就会自动获取所有关联的模型。有关详细信息,请参阅database relationships in CakePHP。
CakePHP对其MVC模型是严格的,你需要阅读blog tutorial,它概述了基础知识并有一些不错的例子。
<强>更新强> 更新了代码以使用findAllbyX,它可以根据特定字段收集所有行。如果你想用CakePHP做任何其他事情,你需要完全阅读CakePHP教程,因为它将涵盖所有这些基本的东西。
答案 2 :(得分:0)
首先,你必须在模型中至少声明一个“用户”类:
class User extends AppModel {
public $actsAs = array('containable');
public $hasMany = array('Food');
}
$ actsAs是您可以将行为附加到模型的方式,在这种情况下,请说此模型可以“包含”或与其他模型连接。
$ hasMany告诉您的模型可以加入到哪些模型中。
然后在您的控制器中,您可以告诉主模型查询中应包含哪些其他模型:
public function doSomething() {
$this->User->contain(array('Food'));
$user = $this->User->findById(1);
$this->set(compact($user));
}
详细了解如何将模型链接在一起: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html
顺便提一下
SELECT users.name, foods.name FROM users, foods WHERE users.id='1' AND users.id=foods.id
应该是
users.id = foods.user_id