2012-03-12 4 views
0

это URL действия, как извлекать данные из двух таблицы в торт PHP

http://localhost/carsdirectory/cars/home

cars_controller.php (контроллер)

public function home(){ 

    $this->set('latest_cars', $this->Car->find('all', array(
     'order' => array(
      'Car.modified DESC', 
      'Car.created Desc'    
     ), 
     'limit' => '3' 
    ))); 

    $this->set('galleries', $this->Gallery->find('all')); 


} 

car.php (модель)

public $hasMany = array(
    'Gallery' => array(
     'className' => 'Gallery', 
     'foreignKey' => 'car_id', 
     'dependent' => true 
    ) 
); 

gallery.php (модель)

var $belongsTo = array(
     'Car' => array(
      'className' => 'Car', 
      'foreignKey' => 'car_id', 
) 
    ); 

home.ctp (вид)

<?php foreach($latest_cars as $latest_car){ ?> 

    <img src="img/car-listings.jpg" />  // now it's static 

    <h4><?php echo $latest_car['Car']['car_name']; ?></h4> // it's dynamic it's coming car table 

    <span>$<?php echo $latest_car['Car']['car_price']; ?></span> // it's dynamic it's coming car table 


<?php } ?> 

я должен заменить эту строку

<img src="img/car-listings.jpg" /> 

с этой линией

<?php $this->Html->image('/media/filter/small/'.$latest_cars['Gallery']['dirname'].'/'.$latest_cars['Gallery']['basename']);?> 

, но им получать эту ошибку

Неопределенный индекс: Gall чень [APP \ Views \ Автомобили \ home.ctp, линия 226]

<img src="img/car-listings.jpg" /> this line i want to make dynamic , so my question how to use join in cars_controller or any other idea and i want to fetch data from galleries table 

это галереи структура таблицы

идентификатор - 1

базовое имя - chrysanthemum_10.jpg

car_id - 1

заранее заблаговременно

ответ

2

Итак, у вас есть Car модели и Gallery модели. Поскольку Gallery имеет car_id свойство, оно может быть использовано для формирования этих CakePHP Associations:

Галерея belongsTo автомобиль

и

автомобилей hasOne Галерея

Вы можете выберите, какие ассоциации вам действительно нужны, и определите их в своих моделях.В вашем случае, вы хотите, чтобы показать галерею автомобиля при запросе для автомобилей, так:

// in car.php 

var $hasOne = 'Gallery'; 

Затем вы можете выбрать, хотите ли вы использовать Containable, чтобы контролировать, какие ассоциации получить включены в запросах, или просто использовать recursive включить все из них:

// in cars_controller.php 

$this->set('latest_cars', $this->Car->find('all', array(
    'recursive' => 1, 
    'order' => array(
     'Car.modified DESC', 
     'Car.created Desc'    
    ), 
    'limit' => '3' 
))); 

Затем на ваш взгляд, использовать $latest_car['Car'] для доступа к свойствам автомобиля и $latest_car['Gallery'] для доступа к свойствам галерея

EDIT

Если Car hasMany Gallery, то вы должны ожидать эту структуру:

[0] => 
    Car => (first car) 
    Gallery => 
     [0] => (first gallery of first car) 
     [1] => (second gallery of first car) 
[1] => 
    Car => (second car) 
    Gallery => 
     [0] => (first gallery of second car) 

etc. 

так, чтобы доступ к нему на ваш взгляд:

<?php 
    foreach($latest_cars as $latest_car){ 
     foreach ($latest_car['Gallery'] as $gallery) 
      echo $this->Html->image('/media/filter/small/'.$gallery['dirname'].'/'.$gallery['basename']); 
?> 
+0

у меня есть в car.php public $ hasMany = array ( \t 'Gallery' => array ( \t 'class Name»=> 'Галерея', \t 'ForeignKey' => 'car_id', \t 'зависимой' => верно \t \t) \t); и gallery.php вар $ belongsTo = массив ( \t \t \t 'Car' => массив ( \t \t \t \t 'имя класса' => 'Car', \t \t \t \t 'ForeignKey' => 'car_id', \t) ); но я получаю этот msg Undefined index: Gallery [APP \ views \ cars \ home.ctp, строка 226], может ли помочь мне больше PLZ –

+0

вы использовали 'рекурсивный' или сдерживаемый? – ori

+0

Mr ori, я не об рекурсивном или сдерживаемом, im new in cake php, но я отредактировал свой вопрос, так что plz u теперь можно проверить –

0

добавить эту строку в свой контроллер файл

$this->loadModel('Table');//table is your model name in singular 
    $this->set('table', $this->Table->find('all')); 

вы можете использовать $ таблицу в режиме напрямую, и если у вас есть отношения с таблицей можно использовать соотношение по умолчанию, предоставляемое по CakePHP

Благодаря

+0

я сделал это уже –

1

Использование присоединиться к контроллеру найти, указать поля как требуется

$results= $this->Car->find('all', 
array('fields'=> array('Car.*','galleries.*'), 
'joins'=> array( 
array('table'=>'galleries', 'type'=>'inner', 
'conditions'=>array('Car.car_id=galleries.car_id')) 
)) 
) 
+0

спасибо за ответ я попробую с этим –

Смежные вопросы