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

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

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

Сообщение pbsc »

caHek2x писал(а): 2017.04.24, 13:49 минут через 15 отвечу ...
Спасибо, буду ждать
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

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

Сообщение caHek2x »

в модели Match

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

public function getHome_team()
{
	return $this->hasOne(Team::className(), ['id' => 'id_home_team']);
}

public function getAway_team()
{
	return $this->hasOne(Team::className(), ['id' => 'id_away_team']);
}
запрос и вывод я в кучу написал думаю это хоть осилите разобрать что к чему, что вам надо из этого а что нет ...

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

$club = Club::find()->where(['id' => 1])->one();
if(!$club) throw new NotFoundHttpException("Клуб не найден");

/* @var Match[] $allMatches */
$allMatches = Match::find()
	->joinWith('home_team ht')
	->joinWith('away_team at')
	->andWhere(['OR', ['ht.club_id' => $club->id], ['at.club_id' => $club->id]])
	->all();

foreach($allMatches as $match)
{
	echo "id: ".$match->id."<br>";
	echo "home_team: ".($match->home_team?$match->home_team->name:"Не найдено")."<br>";
	echo "away_team: ".($match->away_team?$match->away_team->name:"Не найдено")."<br>";
	echo "<br>";
}
и еще раз повторюсь ... пройдите основы ...
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

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

Сообщение pbsc »

Спасибо
но это выводит только айди, а нужно название.

я попробовал, но опять на элиасы ругается.

Но с помощью Вашего кода вывести названия хозяев я смог вывести.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

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

Сообщение caHek2x »

вы о чем
"но это выводит только айди, а нужно название."
где только айди ? я вам вывел названия команд в примере ....
"я попробовал, но опять на элиасы ругается."
где ? этот кусок кода рабочий, специально даже проверил, создал модели и тд ....

upd. только не говорите что вы не можете вывести название клуба ...
блин это же $club->name ... не смешно ...
Последний раз редактировалось caHek2x 2017.04.24, 14:29, всего редактировалось 1 раз.
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

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

Сообщение pbsc »

Я виноват, не полную информвацию дал.
у меня три таблицы
match
__________
id
id_home_team
id_away_team
goal_home
goal_away


team
_____
id
club_id
league_id

club
_____
id
club_name



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

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

Сообщение caHek2x »

и что ? я это и так догадался ... вам для запроса не надо джойнить club ... т.к. club.id = team.club_id
вам на выводе надо club name получить ? для этого тоже join не надо ...
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

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

Сообщение pbsc »

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

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

Сообщение pbsc »

Сейчас выглядит так

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

$club = Club::find()->where(['id' => $id])->one();

/* @var Match[] $allMatches */
$Calendar = Match::find()
	->joinWith('home_team ht')
	->joinWith('away_team at')
	->andWhere(['OR', ['ht.club_id' => $club->id], ['at.club_id' =>$club->id]])
	->all();


        return $this->render('view', [
            'model' => $model,
			'AllPlayers' => $AllPlayers,
		'Calendar' => $Calendar,

	
        ]);
    }

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

<?php foreach ($Calendar as $Cal): ?>
<tr>
<td><?= $Cal->match_matchday ?></td>
<td><?=$Cal->match_date ?></td>
<td><?=$Cal->match_time	?></td>
<td><?= $Cal->home_team->club_id ?></td>
<td><?=$Cal->match_goal_home ?>:<?= $Cal->match_goal_away		 ?></td> 
<td><?= $Cal->away_team->club_id	 ?></td> 
<td>Чемпионщип</td>
<td>Олимпиаштадион</td>
 </tr> 
<?php endforeach; ?>
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

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

Сообщение caHek2x »

в модель Team

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

public function getClub()
{
	return $this->hasOne(Club::className(), ['id' => 'club_id']);
}
а это сами знаете куда ...

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

$club = Club::find()->where(['id' => 1])->one();
if(!$club) throw new NotFoundHttpException("Клуб не найден");

/* @var Match[] $allMatches */
$allMatches = Match::find()
	->joinWith('home_team ht')
	->joinWith('away_team at')
	->andWhere(['OR', ['ht.club_id' => $club->id], ['at.club_id' => $club->id]])
	->with(['home_team.club', 'away_team.club'])
	->all();

foreach($allMatches as $match)
{
	echo "id: ".$match->id."<br>";
	if ($match->home_team)
	{
		echo "home_team: ".$match->home_team->name."<br>";
		if ($match->home_team->club)echo "home_team_club: ".$match->home_team->club->name."<br>";
		else echo "home_team_club: Не найдено в базе<br>";
	}
	else echo "home_team: Не найдено в базе<br>";
	
	if ($match->away_team)
	{
		echo "away_team: ".$match->away_team->name."<br>";
		if ($match->away_team->club)echo "away_team_club: ".$match->away_team->club->name."<br>";
		else echo "away_team_club: Не найдено в базе<br>";
	}
	else echo "away_team: Не найдено в базе<br>";
	echo "<br>";
}
pbsc
Сообщения: 53
Зарегистрирован: 2017.04.01, 14:03

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

Сообщение pbsc »

Эврик. Спасибо большое)
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

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

Сообщение caHek2x »

а завтра вы опять проигнорировал то что надо все таки поучиться спросите "а как вывести ..."
Ответить