public function getSocialUsers()
{
return $this->hasMany(SocialUsers::className(), ['social_id' => 'id_social']);
}
public function getSocialUsers()
{
return $this->hasMany(SocialUsers::className(), ['user_id' => 'id_user']);
}
public function getUser()
{
return $this->hasMany(User::className(), ['id_user' => 'user_id']);
}
public function getSocial()
{
return $this->hasMany(Social::className(), ['id_social' => 'social_id']);
}
public function actionIndex()
{
$id = Yii::$app->user->identity['id_user'];
$profile = Profile::find()->where(['user_id' => $id])->asArray()->one();
$socials = SocialUsers::find()->asArray()->all();
return $this->render('index', [
'profile' => $profile,
'socials' => $socials,
]);
}
<?php if(isset($socials)):?>
<div class="list-group">
<?php foreach ($socials as $social):?>
<a href="#" class="list-group-item"><i class="fa fa-facebook"></i> </a>
<?php endforeach;?>
</div>
<?php endif;?>
class Social extends ActiveRecord {
public function getPivotSocialUser(){
return $this->hasMany(SocialUser::class, ['social_id' => 'id');
}
public function getUsers(){
return $this->hasMany(User::class, ['id' => 'user_id')->via('pivotSocialUser');
}
}
class User extends ActiveRecord {
public function getPivotSocialUser(){
return $this->hasMany(SocialUser::class, ['user_id' => 'id');
}
public function getSocials(){
return $this->hasMany(Social::class, ['id' => 'social_id')->via('pivotSocialUser');
}
}
$social = Social::findOne(['name' => 'facebook']);
var_dump($social->users); // все пользователи фейсбука
$user = User::findOne(['name' => 'admin']);
var_dump($user->socials); // все социальные сети админа
чтобы обращаясь к ней, получать данные из двух других.
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; // связь
$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;
}
$id = Yii::$app->user->identity['id_user'];
$profile = Profile::find()->where(['user_id' => $id])->one(); // уберите asArray
$user = User::findOne(['name' => 'admin']);
var_dump($user->socials); // все социальные сети админа
public function actionIndex()
{
$id = Yii::$app->user->identity['id_user'];
$socialUsers = SocialUsers::find()->where(['user_id' => $id])->one();
$socials = $socialUsers->socials;
return $this->render('index', [
'socials' => $socials,
]);
}
$socialUsers = SocialUsers::findOne($id);
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');
}
}
public function actionIndex()
{
$id = Yii::$app->user->identity['id_user'];
$user = User::findOne($id); // находим запись пользователя
$socials = $user->socialUsers; // здесь мы создаем связь, которая возвращает массив объектов соц сетей
return $this->render('index', [
'socials' => $socials,
]);
}
$socialUsers = SocialUsers::find()->where(['user_id' => $id])->one(); // это не нужно
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;
}
}
Я не знаю, как еще понятнее вам объяснить. При отображении социальных сетей пользователя и при отображении пользователей социальных сетей не нужно вообще использовать SocialUser, вся магия происходит в связях.
return $this->hasMany(Social::class, ['id' => 'social_id'])