Select с inner join с CakePHP


Я с этой проблемой на некоторое время в отношении проекта, который я разрабатываю cakephp", "моя view" не может читать select inner join таблицы.

Controller:

           public function initialize()
       {

           $posts = $this->Posts->find("all",array(
              "joins" => array(
                  array(
                    "table" => "users",
                    "alias" => "User",
                    "type" => "INNER",
                    "conditions" => array("Post.user_id = User.id "),
                    "fields" => array('Post.*', 'User.username')
                   )
               )
            )
         );

Model;

      public function initialize(array $config) {
          $this->addBehavior('Timestamp');
          $this->displayField('title');

         //join     
         $this->belongsTo('User');
}

View

<?= $post->username ?>

Код SQL

SELECT posts.*,
       users.username
FROM   posts
       INNER JOIN users
               ON ( posts.user_id = users.id ) 

, Объясняя лучше, этот запрос ищет "username" таблицы A в таблицу B, причем эта таблица B мой view может сделать чтение обычно. С этой select мой банк приносит запрос именно то, что мне нужно, но моя view не показывает результат, и возвращает null. Или говорит, если я попытаюсь сделать каналы так: $post->users->username, возвращает ошибку, что не находит объекта users.

Author: Lucas L, 2015-11-24

2 answers

JOIN's CakePHP помещает значения в соответствующих объектов.

, Скорее всего, ваш username находится внутри объекта User:

$post->user->username

Дайте pr() объекта $post, чтобы он отображал все атрибуты.

Вместо sql чисто, вы могли бы использовать свойства belongsTo(), hasMany() hasOne() CakePHP.


Вам нужно сделать запрос в controller и установить переменную, чтобы она существует в вашей view.

Controller

$posts = $this->loadModel('Posts');
$all = $posts->find('all');

$this->set('posts', $all);

Model Должности - с Помощью belongsTo()

class PostsTable extends Table
{

    public function initialize(array $config)
    {
        $this->belongsTo('Users');
    }

}

Если вы еще не создали свои модели, проверьте этот ссылке

 0
Author: Jeferson Assis, 2015-11-24 14:08:08

Если кто-то понадобится разрешение, может сделай его, добавив этот код в PostsController.

           public function index()
               {   
           $posts = $this->Posts->find('all', [
              'conditions' => ['Posts.online !=' => -1]])->order(['Posts.publication' => 'DESC'])->contain(['Users']);
           $this->set(compact(['posts']));
               }

Model

        public function initialize(array $config) {
            //funcao para trazer username do inner join
            $this->addBehavior('Timestamp');
            $this->displayField('title');
            $this->belongsTo('Users', [
                'foreignKey' => 'user_id',
                'joinType' => 'INNER',
            ]);
       }
 0
Author: Lucas L, 2015-11-27 17:52:01