Relations() Mysql Join

dzięki wielkie działa :) udało mi się to zrozumieć w miarę teraz może to nie będzie jednak takie strane jak się wydaje już chyba łatwiej było by pisać zapytania. A jak mogę zrobić coś takiego

if(przynaleznosc_klubowa == 0){

echo ‘brak klubu’;

}

To sobie dodaj do bazy np klub o id=1 nazwij go "brak klubu" i wtedy do zawodnika bez klubu ustaw przynaleznosc_klubowa=1.

Relacyjne podejście ma swoje zasady, zapoznaj się dokładnie z tym tematem na pewno ci się przyda.

hmm chciałem zrobić w mysql żeby domyślnie było 0 i skrypt podmieniał bym 0 na jakieś dane zdefiniowane w nim

mam jeszcze jedno pytanie jak tworzę teraz view dla klubu pod informacjami o klubie chciał bym wyświetlić wszystkich zawodników należących do kluby czyli w modelu kluby powinienem utworzyć relacje czy mogę odwołać się np do modelu zawodnik i przez niego pobrać zawodników ?

W modelu Klub musisz zrobić relację np: zawodnicy (jeden klub do wielu zawodników)na początku postów ‘paulrud’ ci pisał, ale pamiętaj, że wtedy $klub->zawodnicy da ci tablicę aktywnych rekordów.

Zasady konfiguracji relacji takie same jak zrobiliśmy z relacją klub.

nie jestem pewny czy to jest dobra relacja




public function relations()

{

	return array(

		'zawodnicy' => array(self::HAS_MANY, 'Zawodnik', array('przynaleznosc_klubowa'=>'id_klubu')),

        );

}



teraz chciał bym wyświetlać liste zawodników w View.php na podstawie CGridView




$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'klub-grid',

	'dataProvider'=>$model->??),

	'columns'=>array(

		'imie',

		'nazwisko',

		'wiek',

		'waga',

	),

));



actionView odwołuję się do ‘model’=>$this->LoadModel($id)

a LoadModel wygląda tak




public function loadModel($id)

{

	$model=Klub::model()->findByPk($id);

	if($model===null)

		throw new CHttpException(404,'The requested page does not exist.');

	return $model;

}



i teraz nie wiem jaki model wywołać w CGridView i gdzie dodać with

zerknę wieczorem, teraz nie ma mocy.

dzięki czekam ja poczytam dokumentacje w tym czasie :)

eh znów mam

PHP notice

Trying to get property of non-object

nie mam pojęcia gdzie popełniam błąd

var_dump($dataProvider->getData());




array(1) {

  [0]=>

  object(Klub)#71 (11) {

    ["_new":"CActiveRecord":private]=>

    bool(false)

    ["_attributes":"CActiveRecord":private]=>

    array(4) {

      ["id_klubu"]=>

      string(1) "1"

      ["nazwa"]=>

      string(13) "zjadacze m?ki"

      ["opis_klubu"]=>

      string(14) "jakis tam klub"

      ["id_trenera"]=>

      string(1) "1"

    }

    ["_related":"CActiveRecord":private]=>

    array(1) {

      ["zawodnicy"]=>

      array(2) {

        [0]=>

        object(Zawodnik)#73 (11) {

          ["_new":"CActiveRecord":private]=>

          bool(false)

          ["_attributes":"CActiveRecord":private]=>

          array(7) {

            ["id_zawodnika"]=>

            string(1) "1"

            ["imie"]=>

            string(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> "Krystian"

            ["nazwisko"]=>

            string(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> "Szymczak"

            ["wiek"]=>

            string(2) "23"

            ["waga"]=>

            string(2) "95"

            ["przynaleznosc_klubowa"]=>

            string(1) "1"

            ["opis_zawdonika"]=>

            string(10) "jaki? opis"

          }



wygląda wszystko że jest dobrze ale mogę się mylić tak próbuje wyświetlić dane




$data = $dataProvider->getData();


echo $data->zawodnicy->imie;



Przecież pisałem żebyś uważał bo przy tej relacji otrzymasz tablicę aktywnych rekordów. Zresztą widać to w kodzie, który zamieściłeś.




$klub->zawodnicy //zwraca array()

$klub->zawodnicy[0]->imie //zwraca imie pierwszego zawodnika


//przy pomocy pętli możesz wyświetlić imiona wszystkich zawodników

foreach($klub->zawodicy as $zawodnik){

   $zawodnik->imie

}



Dzięki nie zauważyłem tego.

możesz mi jeszcze wytłumaczyć jak wykonywane jest update delate i insert do mysql

przerobiłem akcje Create tak żeby wyświetlać w dropdownlist kluby tylko z zapisem mam problem bo zapisuje mi do mysql wartość 0. Nie mogę znaleźć miejsca gdzie wykonywane jest zapytanie do mysql INSERT




		<?php echo $form->labelEx($model,'klub'); ?>

		<?php $list = CHtml::listData(Klub::model()->findAll(), 'id_klubu', 'nazwa'); ?>

		<?php echo $form->dropDownList($model, 'przynaleznosc_klubowa', $list, array('empty'=>'(Wybierz Klub)')); ?>

		<?php echo $form->error($model,'klub'); ?>



taki kod dodaje wszystko poprawnie do mysql ale nie wyświetla na czerwono <select> jak jest wypełnione

jak zmienie ‘przynaleznosc_klubowa’ na ‘klub’ w dropdownlist zapisuje mi do mysql wartość 0

jestem przekonany że ze to wina błędnego zapytania do bazy danych.

chciałem dodać jeszcze koło dropdownlist link ‘dodaj klub’ po kliknięciu na niego pod selectem powinien pojawić się input z nazwa klubu z tym raczej nie będzie problemów chyba jedna funkcja .toggle wystarczy. Tylko jak wykonać zapytanie do mysql INSERT INTO tbl_klub VALUES (id_klubu,nazwa); gdzie nazwa to $_POST z inputa.

nikt nie jest w stanie mi pomóc ?

  1. Zapytanie do bazy wrzuca to co dostanie z formularza.(var_dump($_POST))

  2. Jak włączysz logowanie to zobaczysz jak wygląda zapytanie, już ci o tym pisałem.

  3. Tego nie rozumiem : “taki kod dodaje wszystko poprawnie do mysql ale nie wyświetla na czerwono <select> jak jest wypełnione jak zmienie ‘przynaleznosc_klubowa’ na ‘klub’ w dropdownlist zapisuje mi do mysql wartość 0”

  4. do ostatniej części:

  • dodaj pole (do akcji ukryj pokaż zastosuj jquery)

  • w kontrolerze najpierw sprawdź czy jest pole z nowym klubem, następnie dodaj go do bazy, następnie otrzymane id przypisz do zawodnika->przynaleznosc_klubowa (nadal nie rozumiem czemu nie id_klub skoro to jest właśnie id_klub ?), następnie zapisz zawodnika do bazy

  • wersja druga w/w problemu nadpisz metodę walidacji w modelu, w której zaimplementuj sprawdzanie czy nie dodano pola z nowym klubem, następnie dodaj klub do bazy, następnie przypisz id dodanego klubu do przynaleznosc_klubowa w model, następnie zwróć wynik walidacji, a w kontrolerze zapisz zawodnika do bazy.

log mam włączony ale nie widziałem tak zapytania żadnego tylko SELECT pobierający nazwy klubów.

pominąłem krok z jquery postanowiłem dodać textField z modelu klub odpowiadający za nazwę klubu

w kontrolerze zawodnik w actionCreate dodałem $m_klub = new Klub;

w render dodałem ‘m_club’=>$m_club, tak samo w renderPartial który wczytuje _form. Wydaję mi się że nic nie pominąłem.

tak chce wyświetlić lable textField oraz error




	<div class="row">

		<?php echo $form->labelEx($m_club,'nazwa'); ?>

		<?php echo $form->textField($m_club,'nazwa'); ?>

		<?php echo $form->error($m_club,'nazwa'); ?>

	</div>



niestety otrzymuje CException "Property "Klub.0" is not defined."

skąd bierze się to 0?

czy to wywołania w kontrolerze zawodnika innego modelu potrzebna jest jakaś relacja ? wydaję mi się że powinienem mieć dostęp do atrybutów klubu bez relacji.

czy nie masz literówki?

nie mam literówki w kodzie, tylko w poście ją zrobiłem. Dalej mam ten samo błąd nie wiem co robię źle.Proszę o pomoc