【问题标题】:How to join two tables using models in cakephp如何在 cakephp 中使用模型连接两个表
【发布时间】:2014-06-05 06:31:43
【问题描述】:

我刚刚创建了 2 个模型 UsersModel 和 UserpicsModel 并尝试获取这两个记录,但它返回 Error: Call to a member function find() on a non-object。

//UsersModel.php 
class Users extends AppModel
{
     public $hasMany = array(
        'Userpics' => array(
            'className' => 'Userpics'
         )
    );

}   

//UserpicsMdoel.php
class Userpics extends AppModel
{
     public $belongsTo = array(
        'Users' => array(
            'className' => 'Users',
            'foreignKey' => 'uid'
         )
    );

}

//RecipesController.php
class RecipesController extends AppController {
    public $uses =array('Users','Userpics');
    public function view() {
        $users = $this->Users->Userpics->find('all');
        print('<pre>');
        print_r($users);
        print('<pre>');
        exit;
    }
 }

【问题讨论】:

标签: cakephp


【解决方案1】:

首先:您没有遵循蛋糕惯例:模型应该是单数而不是复数。

但这里的实际问题是模型文件名是错误的:如果您仍然想使用您的约定,那么 Users 模型的名称应该是 Users.php 而不是 UsersModel.php

Userpics 也一样

阅读this有关如何调试此类错误的有用答案。

但如果您决定使用蛋糕命名约定(我强烈建议您这样做),请考虑执行以下操作:

//User.php (table users)
class User extends AppModel
{
    ....
}

//UserPic.php (table user_pics)
class UserPic extends AppModel
{
    ....
}

//RecipesController.php
class RecipesController extends AppController {
    public $uses =array('User','UserPic');
    public function view() {
        $users = $this->User->UserPic->find('all');
        print('<pre>');
        print_r($users);
        print('<pre>');
        exit;
    }
 }

【讨论】:

    【解决方案2】:
    //UsersModel.php 
    class Users extends AppModel
    
    {
         public $hasMany = array(
            'Userpics' => array(
                'className' => 'Userpics',
                'foreignKey' => 'uid'
             )
        );
    
    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多