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’;
}
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 ?
Zapytanie do bazy wrzuca to co dostanie z formularza.(var_dump($_POST))
Jak włączysz logowanie to zobaczysz jak wygląda zapytanie, już ci o tym pisałem.
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”
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