Двойная связь.

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

Двойная связь.

Сообщение pbsc »

Всем привет, вопрос у меня такой:

Имею
таблицу
match
__________
id
id_home_team
id_away_team
goal_home
goal_away

И таблицу
team
_____
id
name

В базе вбиты матчи команды, в которых она и id_home_team, и id_away_team

Задача у меня вывести эти игры списком.

в контроллере у меня так

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

 $Calendar = new ActiveDataProvider([
		'query' => $model->getMatches()->orderBy('match_matchday asc')
		,	
        ]);

Связь такая, но увы только с id_home_team

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

	public function getMatches()
    {
        return $this->hasMany(Match::className(), ['id_home_team' => 'id'])->via('teams');
		
    }
Ну и выводится конечно только те матчи, в которых команда играет дома.
SQL запрос примерно такой мне нужен.

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

SELECT * FROM `match` WHERE `id_home_team`=1 or `id_away_team`=1
Сам вопрос такой, как сделать эту двойную связь, чтобы и 'id_home_team' => 'id', и 'id_away_team' => 'id'?

Заранее спасибо



ЗЫ Знаю вариант, чтобы разбить на строку на две, и тогда нужна будет только одна связь, но это не удобно для базы и добавления в нее.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Двойная связь.

Сообщение futbolim »

Связь и запрос - разные вещи.
Связь по логике связывается по одному полю. На то она и связь.
Вам нужен запрос. Вот его и делайте.
Или, как вариант, 2 связи.
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

и как лучше сделать эти 2 связи?

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

	public function getMatchesAway()
    {
        return $this->hasMany(Match::className(), ['id_away_team' => 'id']);
		
    }
	public function getMatchesHome()
    {
        return $this->hasMany(Match::className(), ['id_home_team' => 'id']);
		
    }
Так?
но как потом выводить это одним списком в перемешку, ибо сортировка по туру будет.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Двойная связь.

Сообщение futbolim »

Значит, не подходит. Делайте запрос.
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

а как примерно это будет выглядеть?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Двойная связь.

Сообщение caHek2x »

match::find()->orWhere(['id_away_team'=>$id, 'id_home_team'=>$id])
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

caHek2x писал(а): 2017.04.22, 19:40 match::find()->orWhere(['id_away_team'=>$id, 'id_home_team'=>$id])
да, но я это выводить буду через контроллер team, а не match.
поэтому данный запрос не получится
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Двойная связь.

Сообщение zelenin »

так работать не будет?

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

public function getMatches()
{
    return $this->getMatchesAway()->union($this->getMatchesHome(), true);
}
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Двойная связь.

Сообщение zelenin »

pbsc писал(а): 2017.04.22, 19:46
caHek2x писал(а): 2017.04.22, 19:40 match::find()->orWhere(['id_away_team'=>$id, 'id_home_team'=>$id])
да, но я это выводить буду через контроллер team, а не match.
поэтому данный запрос не получится
название контроллера никак не связано с названием модели.
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

zelenin писал(а): 2017.04.22, 19:52 так работать не будет?

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

public function getMatches()
{
    return $this->getMatchesAway()->union($this->getMatchesHome(), true);
}
попробовал, увы выводится не в перемешку, то есть сначала список, где в гостях, потом список, где дома
Вывожу я кстати так:

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

<?=ListView::widget([
    'dataProvider' =>  $Calendar,
    
	 'itemView' => '_calendar',
	'summary' => '',
	'pager' => '',
]);

?>
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

Изображение
Крайний левый столбик - туры, и по этому должна быть сортировка, но выглядит так.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Двойная связь.

Сообщение caHek2x »

а order by почему не сделаете ... ?
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

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

$Calendar = new ActiveDataProvider([
		'query' => $model->getMatches()->orderBy('match_matchday asc')
		,	
        ]);
все есть
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Двойная связь.

Сообщение caHek2x »

ясно, как говорит гугл yii order заносит в запрос в скобки ...
ну тогда сделайте проще ... как я писал выше
match::find()->orWhere(['id_away_team'=>$id, 'id_home_team'=>$id])
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

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

(SELECT * FROM `match` WHERE `id_away_team`=1 ORDER BY `match_matchday`) UNION ALL ( SELECT * FROM `match` WHERE `id_home_team`=1 )
вот такой запрос делает yii


так я должен сделать?

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

 $Calendar = match::find()->orWhere(['id_away_team'=>$id, 'id_home_team'=>$id]);
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Двойная связь.

Сообщение caHek2x »

ужас ...

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

$Calendar = new ActiveDataProvider([
	'query' => match::find()->orWhere(['id_away_team'=>$model->id, 'id_home_team'=>$model->id])->orderBy('match_matchday asc')
]);
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

Class 'app\controllers\Match' not found
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Двойная связь.

Сообщение caHek2x »

напишите как называется ваша модель match ...и пропишите её неймспейс в use ... ну не может же быть такого что вы этого сделать не можете ...
причем тут вообще Class 'app\controllers ...
модель это как минимум models
Последний раз редактировалось caHek2x 2017.04.22, 20:55, всего редактировалось 1 раз.
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

Re: Двойная связь.

Сообщение pbsc »

А, это сделал, ошибся

Но итог
No results found.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Двойная связь.

Сообщение caHek2x »

какой запрос вышел ?
Ответить