【问题标题】:In CakePHP, is there a better way to select the users name?在 CakePHP 中,有没有更好的方法来选择用户名?
【发布时间】:2012-03-05 11:19:46
【问题描述】:

我目前有一个users 表和一个posts 表。我的帖子表有一个user_id 字段,但是,我不确定如何获取users 表中的用户name 字段。我正在考虑使用模型afterFind() 方法,然后使用SQL 来选择数据,但必须有比这更好的方法。此外,在我的视图操作中,我正在使用read() 函数来获取单个帖子。模型afterFind() 在运行read() 后会启动吗?如果没有,是否有类似 afterRead() 的等价物?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    只需将 Post belongsTo User 关联起来,每个具有足够高recursive 值的常规查找/读取操作都会自动获取每个帖子的用户。

    $post = $this->Post->find(...);
    echo $post['User']['name'];
    

    【讨论】:

    • 出于安全原因,我会使用echo h($post['User']['name'])!总是逃避你的输出。
    • 有趣,我从未听说过输出转义。我只听说过输入转义,但我想这是有道理的。但是,如果我对输入有严格的限制,那么我就不需要为输出转义了吗?
    • @Doug 总是转义所有用户提供的值,句号。除非您将其重新格式化为保证无害的内容,例如 (int)$valdate('Y-m-d', $date)
    • 应该在模型还是视图中转义?另外,如果我从数据库中提取多个东西怎么办?这是否意味着我必须逃避一切?我可以逃避h($post) 而不是更具体的权利吗?
    • @Doug Escape 输出。见stackoverflow.com/questions/9512873/…。是的,你必须逃避每一个单独的价值,至少通过循环它们。安全不是免费的。
    【解决方案2】:

    你必须像下面这样:

    $this->Cake->findById(7);   Cake.id = 7 
    

    在这里,你可以使用你的 user_id 而不是 7 like..

    Find BY CAKE PHP

    【讨论】:

      【解决方案3】:
      $this->Post->bindModel(array('belongsTo'=>'User'));
      $post = $this->Post->findById($post_id);
      $userName = $post['User']['name'];
      

      这里有错误,我已经在eclipse中输入了(:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 2015-08-17
        • 2023-03-06
        • 1970-01-01
        相关资源
        最近更新 更多