【问题标题】:Cakephp Association Property belongs to Image but also has many imagesCakephp 关联属性属于 Image 但也有很多图片
【发布时间】:2014-03-13 14:19:42
【问题描述】:

我目前正在尝试解决一个我刚刚注意到的问题,因为该属性实际上没有分配给它的 main_image。

但是一旦我为它分配了一个主图像。相关图片引起了问题。

属性表有一个 belongsTo 关系

public $belongsTo = array( 'Image' => array(
            'className' => 'Image',
            'foreignKey' => 'main_image_id'
        ));

还有一个hasMany

public $hasMany = array(
        'Image' => array(
            'className' => 'Image',
            'foreignKey' => 'property_id'
        )
    );

问题是当我填充相关图像时,我收到多个类似于以下的错误

非法字符串偏移'id'

我的数据是这样的

property(array)
    Image(array)
        id1
        descriptionPainted Brick Design
        imageuploads/properties/3/Amazing-Painted-Brick-Houses-Design.jpeg
        property_id3
        0(array)
            id1
            descriptionPainted Brick Design
            imageuploads/properties/3/Amazing-Painted-Brick-Houses-Design.jpeg
            property_id3

视图是这样生成的

<div class="related">
    <h3><?php echo __('Related Images'); ?></h3>
    <?php if (!empty($property['Image'])): ?>
    <table cellpadding = "0" cellspacing = "0">
    <tr>
        <th><?php echo __('Id'); ?></th>
        <th><?php echo __('Description'); ?></th>
        <th><?php echo __('Image'); ?></th>
        <th><?php echo __('Property Id'); ?></th>
        <th class="actions"><?php echo __('Actions'); ?></th>
    </tr>
    <?php foreach ($property['Image'] as $image): ?>
        <tr>
            <td><?php echo $image['id']; ?></td>
            <td><?php echo $image['description']; ?></td>
            <td><?php echo $image['image']; ?></td>
            <td><?php echo $image['property_id']; ?></td>
            <td class="actions">
                <?php echo $this->Html->link(__('View'), array('controller' => 'images', 'action' => 'view', $image['id'])); ?>
                <?php echo $this->Html->link(__('Edit'), array('controller' => 'images', 'action' => 'edit', $image['id'])); ?>
                <?php echo $this->Form->postLink(__('Delete'), array('controller' => 'images', 'action' => 'delete', $image['id']), null, __('Are you sure you want to delete # %s?', $image['id'])); ?>
            </td>
        </tr>
    <?php endforeach; ?>
    </table>
<?php endif; ?>

    <div class="actions">
        <ul>
            <li><?php echo $this->Html->link(__('New Image'), array('controller' => 'images', 'action' => 'add')); ?> </li>
        </ul>
    </div>
</div>

我不确定关系是否设置不正确,或者我可能必须包含一个 if 来查看数组之前是否有数据,然后实现 for 循环。

【问题讨论】:

  • 你的Image belongsTo PropertyProperty hasMany Image不应该吗?
  • @skywalker 但如果我这样做了,我就不会有 main_image_id 的详细信息
  • 您的主图像可以在图像表中具有类似main_image 的列,并且可以是tinyint 类型,只需将其设置为1,您就可以将其主图像与其他图像一起用于Property ,我认为这是最适合您的解决方案。
  • @skywalker 那么我将如何显示我目前正在显示的图像,就像 ' style='max-width: 100%;height:150px;;'>

标签: cakephp cakephp-2.4


【解决方案1】:

我会回答而不是评论。您将像这样获得所有属性及其主图像(将其放在您的控制器操作中,例如 index()):

$properties= $this->Property->find('all', array(
    'contain' => array(
        'Image' => array(
            'conditions' => array(
                'main_image' => true
            )
        )
    )
));

$this->set('properties', $properties);

在你看来:

<img src='<?php echo '/realestateagencyadministration/img/' . $property['Image'][0]['main_image'] ?>' style='max-width: 100%;height:150px;;'>

在最后一个问题上,不要相信我,我正在把它写出来,我认为你需要 [0],但你可以轻松解决这个问题。

【讨论】:

  • 在视图或控制器中找到的位置。
  • 我不知道如何在 Paginator 设置中实现这一点
  • 我正在检索这样的属性 $this->Paginator->settings = array('conditions' => array( $conditionID, $categoryID, $localityID, $serviceTypeID, 'Property.price BETWEEN ' . $params['priceFrom'] . ' AND ' . $params['priceTo']), 'limit' => 15);
  • 我也试过你的代码,它仍然返回 2 张图片,即使一张不是主要的
  • 然后只需将contain 数组添加到您的分页器设置数组中。对于两个图像,将该属性的所有其他图像设置为具有main_image 0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多