ОШИБКА при связке таблиц базы данных hasMany() подскажите

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
allvasya
Сообщения: 47
Зарегистрирован: 2015.04.28, 03:29

ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение allvasya »

Привет есть 2 модели в одной папке бэкэнда video.php
public function attributeLabels()
{
return [
'id' => 'ID',
'title' => 'Title',
'content' => 'Content',
'video' => 'Video',
'user_id' => 'User ID',
'category_id' => 'Category ID',
'look' => 'Look',
];
}
and category.php
public function attributeLabels()
{
return [
'id' => 'ID',
'title' => 'Title',
];
}
Пытаюсь связать 'category_id' из video.php с 'id' из category.php чтобы выводило title категории

в video.php создал функцию

Код: Выделить всё

public function getCat()
    {
        return $this->hasMany(Category::className(), ['category_id'=>'id']);
    }
    
}
 
а в ВИДЕ прописываю в компоненты GridView::widget

Код: Выделить всё

            'cat.category_id',
 

В итоге YII выдает ошибку

Код: Выделить всё

Database Exception – yii\db\Exception
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'category_id' in 'where clause'
The SQL being executed was: SELECT * FROM `category` WHERE `category_id`=1

Error Info: Array
(
    [0] => 42S22
    [1] => 1054
    [2] => Unknown column 'category_id' in 'where clause'
)

↵
Caused by: PDOException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'category_id' in 'where clause'

in /var/www/obmen.mu/vendor/yiisoft/yii2/db/Command.php at line 822
Голову ломаю не пойму почему он ищет в базе category колонку category_id? много где смотрел вроде правильно все сделал.
В общем подскажите чайнику, в чем ошибка?
Заранее благодарен
allvasya
Сообщения: 47
Зарегистрирован: 2015.04.28, 03:29

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение allvasya »

Спасибо, понятно, что нечего не понятно :D

А можешь на пальцах объяснить, что именно у меня не так, что надо дописать или убрать?
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение vitalik1183 »

Не так:

Код: Выделить всё

return $this->hasMany(Category::className(), ['category_id'=>'id']); 
А по всей видимости так:

Код: Выделить всё

return $this->hasMany(Category::className(), ['id'=>'category_id']); 
Yii2!
allvasya
Сообщения: 47
Зарегистрирован: 2015.04.28, 03:29

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение allvasya »

vitalik1183 писал(а):Не так:

Код: Выделить всё

return $this->hasMany(Category::className(), ['category_id'=>'id']);
А по всей видимости так:

Код: Выделить всё

return $this->hasMany(Category::className(), ['id'=>'category_id']);

пробовал выдает ошибку
Unknown Property – yii\base\UnknownPropertyException
Getting unknown property: backend\models\Category::category_id
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение vitalik1183 »

Вы это в какую модель помещаете?
Yii2!
allvasya
Сообщения: 47
Зарегистрирован: 2015.04.28, 03:29

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение allvasya »

vitalik1183 писал(а):Вы это в какую модель помещаете?
в video.php
задача получить title категории по ключу 'category_id' из модели category.php
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение vitalik1183 »

У вас может быть одна категория у записи? Если да то измените на hasOne
Yii2!
allvasya
Сообщения: 47
Зарегистрирован: 2015.04.28, 03:29

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение allvasya »

vitalik1183 писал(а):У вас может быть одна категория у записи? Если да то измените на hasOne
пробовал, та же ошибка


вот модель video.php

Код: Выделить всё

<?php

namespace backend\models;

use Yii;


/**
 * This is the model class for table "video".
 *
 * @property integer $id
 * @property integer $title
 * @property integer $content
 * @property integer $video
 * @property integer $user_id
 * @property integer $category_id
 * @property integer $look
 */
class Video extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'video';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['title', 'content', 'video', 'user_id', 'category_id', 'look'], 'required'],
            [['user_id', 'category_id', 'look'], 'integer']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'title' => 'Title',
            'content' => 'Content',
            'video' => 'Video',
            'user_id' => 'User ID',
            'category_id' => 'Category ID',
            'look' => 'Look',
        ];
    }
    
    public function getCat()
    {
        return $this->hasOne(Category::className(), ['id'=>'category_id']);
    }
    
}
  




а вот category.php

Код: Выделить всё

<?php

namespace backend\models;

use Yii;

/**
 * This is the model class for table "category".
 *
 * @property integer $id
 * @property string $title
 */
class Category extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'category';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['title'], 'required'],
            [['title'], 'string', 'max' => 255]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'title' => 'Title',
        ];
    }
}
  


а вот вид /views/video/index.html

Код: Выделить всё

<?php

use yii\helpers\Html;
use yii\grid\GridView;

/* @var $this yii\web\View */
/* @var $searchModel backend\models\VideoSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Videos';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="video-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Create Video', ['create'], ['class' => 'btn btn-success']) ?>
    </p>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

          
            'title',
            'content',
            'video',
            'user_id',
            'cat.category_id',
            'look',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

</div>
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение vitalik1183 »

Тогда пишите cat.title в гриде
А если у вас хез мани то вводите цикл и выводите все отмеченные категории.
А ну и разумеется про with не забудьте. А то много запросов получится.
Yii2!
allvasya
Сообщения: 47
Зарегистрирован: 2015.04.28, 03:29

Re: ОШИБКА при связке таблиц базы данных hasMany() подскажите

Сообщение allvasya »

vitalik1183 писал(а):Тогда пишите cat.title в гриде
А если у вас хез мани то вводите цикл и выводите все отмеченные категории.
А ну и разумеется про with не забудьте. А то много запросов получится.

Спасибо большое, ЗАРАБОТАЛО :roll:
Ответить