【问题标题】:Phalcon find with conditions of models relationPhalcon 找到模型关系的条件
【发布时间】:2018-05-27 04:11:00
【问题描述】:

我有这个型号代码:

class TvguideChannel extends Model{

    public function initialize() {
        $this->setSource('tvguide_channel');
        $this->setConnectionService('db');

        $this->hasMany('code', __NAMESPACE__.'\Tvguide', "ch_code", ['alias' => 'Tvguide']);
    }

    public function getSource() {
        return 'tvguide_channel';
    } 
}

和控制器:

    $data = TvguideChannel::find();
    $dateDetails = $data->getTvguide(['order' => '$_POST["time"] DESC']);

    $paginator = new PaginatorModel(
        array(
            "data" => $data,
            "limit" => $limit,
            "page" => $curPage
        )
    );

    $items = $paginator->getPaginate();

这不起作用。如何在控制器中使用 Tvguide 模型中的列? 感谢您的帮助。

【问题讨论】:

    标签: php model phalcon phalcon-orm


    【解决方案1】:

    您的控制器代码将返回一个TvguideChannel 实例。 要访问关系,您必须使用上面定义的别名。

    $data->Tvguide
    

    以上内容应包含此记录的所有电视指南。

    这里是hasMany()的更详细示例:

    $this->hasMany(
        'id', // The primary key in your main table
        'Models\ServicesVideos', // The Model you are joining
        'service_id', // Foreign key for main table
        [
            'alias' => 'videos', // Alias which you use later to access the relation
            // additional parameters like where, order, limit etc...
            'params' => [
                'order' => 'position ASC',
                'conditions' => 'type = :type:',
                'bind' => [
                    'type' => get_class($this)
                ]
            ]
        ]
    );
    

    UPDATE:将参数传递给关系本身的示例。

    型号代码:

    class Orders extends BaseModel
    {
        public function initialize()
        {
            $this->hasMany('id', 'Models\OrderDetails', 'order_id', [
                'alias' => 'details',
            ]);
        }
     }
    

    控制器代码:

    // We want only related records with price higher than 9.00
    $order = \Models\Orders::findFirst(17);
    $orderDetails = $order->getDetails([
        'conditions' => 'price > 9.00'
    ]);
    

    更新 2

    find()方法返回一个Resulset,这意味着你不能直接使用$data->getTvguide。您必须遍历每条记录并访问其相关条目。

    $data = TvguideChannel::find();
    foreach ($data as $item) {
        // This will return related guides for each channel.
        $dateDetails = $item->getTvguide(...);
    }
    

    【讨论】:

    • 但是如果我想将参数发送到哪里? ['条件' => 'ch_code = $_POST["ch_code"]']。我怎样才能在模型中发送这个?
    • 如果我理解正确,您想将参数传递给Tvguide 关系吗?用上面类似的例子更新了我的答案。
    • 不工作。未捕获的错误:调用未定义的方法 Phalcon\Mvc\Model\Resultset\Simple::getTvguide()
    • 你能说明你是怎么称呼它的吗?也许试试['alias' => 'guides']$data->getGuides()
    • 我需要获取所有记录,但不是 FindFirst(17)。
    【解决方案2】:

    如果您需要从相关模型中查找位置,则需要使用查询生成器。

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      相关资源
      最近更新 更多