我有一个问题,关于如何在两个不同的问候中彼此加入时建立两个模型之间的关系.
我将举例说明我遇到的问题:
Users (id, name)
Messages (id, message, from_user_id, to_user_id)
Run Code Online (Sandbox Code Playgroud)
(在我的情况下,它不是用户也不是消息,但希望以更简单的方式说明问题)
用户可以相互发送消息,每封消息都有一个发送消息的用户和一个将接收消息的用户.我试图找出模型关系:
class User extends AppModel {
var $hasMany = array("Message");
}
class Message extends AppModel {
var $belongsTo = array("User");
}
Run Code Online (Sandbox Code Playgroud)
我也不确定如何在数据库中命名字段,因此CakePHP将正确地获取关系.
我建立一个网站,有三种型号:Store,StoreReview,和User.该网站列出商店,用户可以查看商店.因此,我的Store模型可以有很多StoreReview行,每StoreReview行属于User一行.
我的问题是:在获取所有Store行时,如何获取相关User的StoreReview行?目前我正在使用:
<?php
class StoresController extends AppController {
public function view($slug) {
$stores = $this->Store->find('all');
}
}
Run Code Online (Sandbox Code Playgroud)
但这只返回'StoreReview'行.因为这User行是另一个更深的层次,我不确定如何获取它; 我已经检查过CakePHP的文档和Googled,但是CakePHP最近重新开始了他们的文档站点,我的Google搜索网站上的示例都没有用.
先感谢您.
我正在使用CakePHP 2.1
我在数据库中有以下字段.
id
views
max_views
Run Code Online (Sandbox Code Playgroud)
我想获取views < max_views使用查询查询的记录.那么查询应该是什么呢?
谢谢.
我是CakePHP框架的新手,正在尝试设置一个"Hello World"项目.在处理它时,我在执行简单的数据库查询时遇到了来自CakePHP的非常慢的响应.
以下是我所做的步骤:
编辑默认的AppController.php文件,如下所示:
class AppController extends Controller {
var $uses = array('Test');
function say_hello() {
$this->Test->query("select * from test where id=0");
echo "hello";
}
}
Run Code Online (Sandbox Code Playgroud)之后,我访问了"http:// localhost/app/say_hello"链接,并且响应时间超过1秒.
如果我将查询语句注释掉如下:
class AppController extends Controller {
var $uses = array('Test');
function say_hello() {
//$this->Test->query("select * from test where id=0");
echo "hello";
}
}
Run Code Online (Sandbox Code Playgroud)
然后,它只需要大约60ms来响应.
这对我来说似乎不对,因为在空表上执行简单查询不应该花费~940ms.我尝试使用DebugKit进行调试,它表明ControllerAction(在这种情况下,say_hello动作非常简单)占用了超过1秒的处理时间.另请注意,缓慢问题不是由DB引起的,因为DebugKit表明在执行say_hello操作时只有一个查询,并且该查询几乎需要0ms才能完成.
我不确定是什么导致这种缓慢.任何经验丰富的CakePHP成员能否告诉我一些关于这种情况下错误的信息?我还应该做些什么来解决问题并解决问题?
谢谢.
我在尝试登录用户时收到以下错误:
Call to a member function login() on a non-object
Run Code Online (Sandbox Code Playgroud)
我的登录操作使用外部模型.行动是:
public function login() {
$this->loadModel('User');
if ($this->request->is('post')) {
$theUser = $this->User->find('first', array('conditions' => array('User.username' => $this->request->data['User']['username'])));
if($theUser['User']['activated'] == TRUE){
if ($this->Auth->login($this->request->data)){
$this->Session->setFlash('Logged in successfully');
$this->redirect(array('controller' => 'admin', 'action' => 'index'));
} else {
$this->Session->setFlash('Username or password is incorrect');
}
}else $this->Session->setFlash('User not yet activated. Please Contact administrator.');
}
}
Run Code Online (Sandbox Code Playgroud)
传递给的请求数据$this->Auth->login是:
array(
'User' => array(
'password' => '*****',
'username' => 'admin'
)
)
Run Code Online (Sandbox Code Playgroud)
$this->Auth->login($this->request->data) 是导致致命错误的行.
有人可以解释错误的确切含义以及可能导致错误的原因吗?
大家好Iam目前正在尝试使用https://github.com/CakeDC/users安装CakeDC/users插件,并且遇到了错误.
当我运行命令'./Console/cake schema create users --plugin Users'时,我收到错误消息:
错误:无法找到插件用户.0 C:\ wamp\www\toppin\lib\cake\console\shell.php(376):CakePlugin :: load('Users')
我尝试使用CakePlugin :: loadAll()加载用户和迁移插件; 并单独使用CakePlugin :: load('pluginhere');
任何想法或帮助将非常感谢,谢谢.
如何使用find方法在cakePHP中创建子查询?例如:
SELECT *, (SELECT COUNT(*) FROM table2 WHERE table2.field1 = table1.id) AS count
FROM table1
WHERE table1.field1 = 'value'
Run Code Online (Sandbox Code Playgroud)
!table2.field1 = table1.id !!!
我已经在同一个CakePHP应用程序上工作了几个月(没有版本迁移),并且最近遇到了一个错误,我似乎无法找到它的原因.错误消息显示它来自此文件的第4行(Comment.php)
class Comment extends appModel {
var $actsAs = array(
'Containable'
);
var $belongsTo = 'Core';
public $validate = array(
'author' => array(
'rule'=>'notEmpty'
),
'body' => array(
'rule'=>'notEmpty',
'message' => 'You cannot leave a blank comment'
)
);
}
Run Code Online (Sandbox Code Playgroud)
仅在尝试加载模型时出现:
Controller::loadModel('Comment');
Run Code Online (Sandbox Code Playgroud)
对于某些上下文,每个Core模型都与可以评论的表单相关.注释通过外键关系core_id与Core模型相关.每个核心只涉及一个表格,可以有任意数量的评论.
我能找到的类似问题的唯一其他解决方案是从一个版本的蛋糕迁移到另一个版本,但是自从开始项目以来我一直在使用相同的版本.
我搜索了这个问题,发现了很多类似的答案
这就是公认的答案
$ this-> Widget-> updateAll(
Run Code Online (Sandbox Code Playgroud)array('Widget.numberfield' => 'Widget.numberfield + 1'), array('Widget.id' => 1));
现在,iam在cakephp3中使用此查询。这是我的样子
$ Questions = $ this-> loadModel('Questions');
$问题-> updateAll(
Run Code Online (Sandbox Code Playgroud)array('questions.trend' => 'questions.trend + 1'), array('questions.description' => $undashed_title));
一切正常,查询正在执行,但是当我检查调试器的sql日志时,这就是我发现的内容
更新问题,请设置questions.trend ='questions.trend + 1',而where Problems.description ='哪种类型
但是我在数据库中的值没有像应有的那样更新(我说这是因为我也已经在phpmyadmin控制台上复制了此查询,并且无法正常工作)
我相信查询应该看起来像这样
更新问题SETquestions.trend = questions.trend + 1 WHEREquestions.description ='What Type'
任何帮助,将不胜感激,谢谢:)
我在两个表之间有一个HABTM关系:items并locations使用表items_locations来加入它们.
items_locations还存储了更多信息.这是架构
items_locations(id, location_id, item_id, quantity)
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个页面,显示一个位置中的所有项目,并让用户通过数据网格样式界面一次编辑多个字段:
Location: Factory XYZ
___________________________
|___Item____|___Quantity___|
| Widget | 3 |
| Sprocket | 1 |
| Doohickey | 15 |
----------------------------
Run Code Online (Sandbox Code Playgroud)
为了帮助解决这个问题,我有一个名为的控制器InventoryController:
var $uses = array('Item', 'Location'); // should I add 'ItemsLocation' ?
Run Code Online (Sandbox Code Playgroud)
如何构建多维表单来编辑此数据?
编辑:
我试图让我的数据看起来像Deceze如下所述,但我又遇到了问题......
// inventory_controller.php
function edit($locationId) {
$this->data = $this->Item->ItemsLocation->find(
'all',
array(
"conditions" => array("location_id" => $locationId)
)
);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,$this->data出现如下:
Array (
[0] => Array (
[ItemsLocation] => …Run Code Online (Sandbox Code Playgroud) 我有用户模型和文章模型.用户有很多文章.因此,当我查询用户时,将检索文章表的所有字段.我想限制它只是文章的标题.
$user = $this->User->find('all', array('conditions' => array('User.id' => $id), 'fields' => array('User.firstName', 'Article.title')));
Run Code Online (Sandbox Code Playgroud)
这些字段适用于用户模型.但它不适用于相关模型.抛出错误
SQL Error: 1054: Unknown column 'Article.title' in 'field list'
Run Code Online (Sandbox Code Playgroud)
我感谢任何帮助.
我基本上试图通过返回Project和Update表的Users和Comments来扩展查询的深度.
网站访问者可以查看项目,该项目下面列出了许多更新.
用户可以在下面的初始项目和更新中留下评论,每个更新和项目都由任何用户提交.
我设置了以下关系,但这些可能是错误的:
Project.php (Model)
belongsTo - User
hasMany - Update, Comment
Update.php (Model)
belongsTo - Project, User
hasMany - Comment
Comment.php (Model)
belongsTo - Project, Update
hasAndBelongsToMany - User
User.php (Model)
hasMany - Project, Update, Comment
Run Code Online (Sandbox Code Playgroud)
ProjectController.php中的视图如下:
public function view($id = null, $slug = null) {
$this->Project->id = $id;
$this->set('Projects', $this->Project->read());
}
Run Code Online (Sandbox Code Playgroud)
但这只导出一个包含以下内容的数组
Project
User (belonging to Project)
Comments (belonging to Project)
Updates (belonging to Project)
Run Code Online (Sandbox Code Playgroud)
但我想要这个完整的结果,包含对所有内容和用户的评论:
Project
User (belonging to Project)
Comments (belonging to Project)
User (belonging …Run Code Online (Sandbox Code Playgroud) cakephp ×12
cakephp-model ×12
php ×7
mysql ×3
cakephp-2.0 ×2
cakephp-2.1 ×2
cakedc ×1
cakephp-1.3 ×1
cakephp-2.3 ×1
cakephp-3.0 ×1
model ×1