как получить данные из двух таблиц в торт php - PullRequest
0 голосов
/ 12 марта 2012

URL-адрес действия

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']);?> 

но я получаю эту ошибку

Неопределенный индекс: Галерея [APP \ views \ cars \ 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

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

id - 1

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

car_id - 1

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

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

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

Галерея принадлежит Авто

и

Автомобиль имеет одну галерею

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

// 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']);
?>
1 голос
/ 12 марта 2012

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

$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 голосов
/ 12 марта 2012

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

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

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

Спасибо

...