使用锂和 MySQL 的 CRUD
Posted
技术标签:
【中文标题】使用锂和 MySQL 的 CRUD【英文标题】:CRUD with Lithium & MySQL 【发布时间】:2011-08-09 11:21:17 【问题描述】:我刚开始使用 php 框架锂 (v 0.10)。 我关注了the quick start manual,它使用 MongoDB 作为数据库。 为了进一步了解锂,我想将 DBMS 从 MonogoDB 切换到 mysql。
当我在浏览器锂中打开/posts/
时遇到的问题只显示一个没有错误消息的空白页面。另外,当我去/posts/add/
时,会显示正确的表单,但是在提交数据(正确写入数据库)后,锂也只是显示一个空白页。怎么了?
另外,在阅读了有关锂模型的锂文档后,我仍然不太确定模型(在这种情况下)属于什么逻辑。
UPDATE 1:
我看起来 APC 缓存有问题。安装 APC 并重命名包含锂的文件夹后,该应用程序可以正常运行。保留包含锂的文件夹名称不变时,出现缓存错误:
Warning: include(/var/www/web/frameworks/lithium/app/resources/tmp/cache/templates/template_views_layouts_default.html_886_1308416958_798.php) [function.include]: failed to open stream: No such file or directory in /var/www/web/frameworks/lithium/libraries/lithium/template/view/adapter/File.php on line 111
Warning: include() [function.include]: Failed opening '/var/www/web/frameworks/lithium/app/resources/tmp/cache/templates/template_views_layouts_default.html_886_1308416958_798.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/web/frameworks/lithium/libraries/lithium/template/view/adapter/File.php on line 111
END UPDATE 1
我手动设置了一个 MySQL 表 posts
,其中包含 id
、title
和 body
行。
/app/models
中的我的 Posts.php
模型:
<?php
namespace app\models;
class Posts extends \lithium\data\Model
?>
/app/controllers
中的我的 PostsController.php
控制器:
<?php
namespace app\controllers;
use app\models\Posts;
class PostsController extends \lithium\action\Controller
public function index()
$posts = Posts::all();
return compact('posts');
var_dump($posts);
public function add()
if($this->request->data)
$post = Posts::create($this->request->data);
$success = $post->save();
return compact('success');
?>
最后是我对index.html.php
在/app/views/posts/
中的看法:
<?php foreach($posts as $post): ?>
<article>
<h1><?=$post->title ?></h1>
<p><?=$post->body ?></p>
</article>
<?php endforeach; ?>
还有add.html.php
in /app/views/posts/
:
<?=$this->form->create(); ?>
<?=$this->form->field('title');?>
<?=$this->form->field('body', array('type' => 'textarea'));?>
<?=$this->form->submit('Add Post'); ?>
<?=$this->form->end(); ?>
<?php if ($success): ?>
<p>Post Successfully Saved</p>
<?php endif; ?>
【问题讨论】:
你得到什么错误或者根本没有得到什么错误,试试 var_dump($posts) ? @jurka:根本没有。 Chrome 只显示带有Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection. No Data was sent by the server.
的错误页面
【参考方案1】:
一些提示...
1) 您确定 Lithium 总体上运行正常吗?我对您的实际问题/问题感到困惑。
2) 无需更改 PostsController,Posts::all();
只是 Posts::find('all');
的简写
3) 您可能需要更改您的帖子模型,如果您没有名为id您可能需要在模型中添加一个。
例如,如果您的表格包含 postid、title、body、date 等列。 .. 将此添加到您的模型中
<?php
namespace app\models;
class Posts extends \lithium\data\Model
public $_meta = array('key' => 'postid');
?>
注意 'key' => 'postid' 会让锂知道使用 postid 作为表的键,而不是寻找 id
4) 以下是在控制器中实际构建 MySQL 查询的方法...
public function locations($companyid,$state=null)
/* removes null or false values with array_filter() */
$conditions = array_filter(array('companyid' => $companyid, 'state' => $state));
/* pass $conditions array to the Locations model, find all, order by city */
$locations = Locations::find('all', array(
'conditions' => $conditions,
'order' => array('city' => 'ASC')
));
return compact('locations');
查看锂手册以获得更多帮助:http://li3.me/docs/manual
模型
http://li3.me/docs/manual/working-with-data/using-models.md
控制器
http://li3.me/docs/manual/handling-http-requests/controllers.md
观看次数
http://li3.me/docs/manual/handling-http-requests/views.md
【讨论】:
感谢您的详细解答!我阅读了模型、控制器和视图的文档,并相应地更新了我的问题。我仍然不太确定出了什么问题。 会不会是某种缓存问题?因为我感觉锂没有立即获得我对文件所做的更改。 我要做的第一件事是使用 .10 而不是旧的 0.9.9 ... 几乎所有设置都相同(您可以复制您的控制器/模型/视图)但它是更新的代码。 sourceforge.net/projects/li3/files/lithium-0_10 我将锂更新到 0.10 并相应地更新了我的问题(请参阅答案的更新部分)。问题解决了,看来是APC没有安装导致的问题。以上是关于使用锂和 MySQL 的 CRUD的主要内容,如果未能解决你的问题,请参考以下文章