class Author extends ActiveRecord {
public function getBooks(){
return $this->hasMany(Book::class, ['author_id' => 'id']);
}
}
class AuthorController extends Controller {
public function actionIndex() {
$authors = Author::find()->with('books')->all();
return $this->render('index', ['authors' => $authors]);
}
}
foreach($authors as $author){
echo '<h2>'.$author->id.') '.$author->name.'</h2>'; // 1) Иван И.И.
echo '<ol>';
foreach ($author->books as $book){
echo '<li>'.$book->title.'</li>'; // 53. Связи в Yii2 простым языком
}
echo '</ol>';
}
class Social {
// связь со сводной таблицей SocialUser
public function getPivotSocialUser(){
return $this->hasMany(SocialUser::class, ['social_id' => 'id');
}
// связь с таблицей User через указанную выше сводную таблицу
public function getUsers(){
return $this->hasMany(User::class, ['id' => 'user_id')->via('pivotSocialUser');
}
}
class User extends ActiveRecord {
// аналогичная связь со сводной таблицей SocialUser
public function getPivotSocialUser(){
return $this->hasMany(SocialUser::class, ['user_id' => 'id']);
}
// аналогичная связь с таблицей Social через указанную выше сводную таблицу
public function getSocials(){
return $this->hasMany(Social::class, ['id' => 'social_id'])->via('pivotSocialUser');
}
}
// класс для работы со сводной таблицей
class SocialUser extends ActiveRecord {
// связь сводной таблицы с User
public function getUser(){
return $this->hasOne(User::class, ['id' => 'user_id']);
}
// связь сводной таблицы с Social
public function getSocial(){
return $this->hasOne(Social::class, ['id' => 'social_id']);
}
}
// находим пользователя, не используем asArray()
$user = User::find()->where(['id' => $id])->one();
$socials = $user->socials; // возвращает массив Social[] всех социальных сетей пользователя, используя сводную таблицу
// находим социальную сеть, не используем asArray()
$social = Social::find()->where(['id' => $id])->one();
$users = $social->users; // возвращает массив User[] всех пользователей социальной сети, используя сводную таблицу
$users = User::find()->where(['is_active' => true])->with('social')->all();
foreach ($users as $user) {
echo $user->name;
$socials = $user->socials;
foreach ($socials as $social) {
echo $social->name;
}
}
$socials = Social::find()->where(['is_active' => true])->with('user')->all();
foreach ($socials as $social) {
echo $social->name;
$users = $social->users;
foreach ($users as $user) {
echo $user->name;
}
}
public function actionIndex()
{
$id = Yii::$app->user->identity['id_user'];
$socialUsers = SocialUsers::find()->where(['user_id' => $id])->one(); // это не нужно
$user = Users::findOne($id); // находим запись пользователя
$socials = $user->socials; // здесь мы создаем связь, которая возвращает массив объектов соц сетей
return $this->render('index', [
'socials' => $socials,
]);
}
class User {
public function getSocialUser(){
return $this->hasMany(SocialUser::class, ['user_id' => 'id']);
}
public function getSocials(){
return $this->hasMany(Social::class, ['id' => 'social_id'])->via('socialUser');
}
}
$id = Yii::$app->user->identity['id_user'];
$profile = Profile::find()->where(['user_id' => $id])->one(); // уберите asArray
$socials = $profile->socials;
foreach ($socials as $social) /* @var $social Social */ {
echo $social->icon;
}
чтобы обращаясь к ней, получать данные из двух других.
class PivotSocialUser extends ActiveRecord {
public function getUser(){
return $this->hasOne(User::class, ['id' => 'user_id');
}
public function getSocial(){
return $this->hasOne(Social::class, ['id' => 'social_id');
}
}
$pivotSocialUser->user; // пользователь
$pivotSocialUser->social; // связь
При использовании
Yii::$app->user->contact
Получаю ошибку:
Unknown Property – yii\base\UnknownPropertyException
Getting unknown property: yii\web\User::contact
Yii::$app->user->contact;
Yii::$app->user->identity->contact;
SELECT products.id, products.name, GROUP_CONCAT(images.path) FROM products
LEFT JOIN pivot_products_images ON products.id = pivot_products_images.product_id
LEFT JOIN images ON image.id = pivot_products_images.image_id
GROUP BY product.id
при нажатии на кнопку происходит событие, которое, грубо скажим, умножает одно на другое, но нужно сделать так, чтобы было ограничение по вводу чисел от 1 и вверх. Я знаю как решить это на JS, но мне нужно сделать это по серверной части.
На бэке смотрим ID категории (15 или 16 в данном случае), в соответствии с ID ищем данные в базе:
SELECT * FROM `items` WHERE `category_id` = 15
Отправляем во вью и выводим: