【问题标题】:phalcon model conditions across multiple tables跨多个表的 phalcon 模型条件
【发布时间】:2015-08-09 14:10:01
【问题描述】:

我是 phalcon 和 mvc 的新手,所以请多多包涵。

我有两个表,媒体和用户,分别具有媒体和用户模型。代码如下

use Phalcon\Mvc\Model;        
class Media extends Model
        {

            public $media_id, $user, $media_type, $title, $status_on, $visible, $modified_date;

            public function initialize()
            {
                $this->belongsTo('user', 'users', 'user_id');
            }
        }
use Phalcon\Mvc\Model;        
class Users extends Model
    {
        public $user_id, $first_name, $last_name, $email_address, $status, $created_on;

        public function initialize()
        {
             $this->hasMany('user_id','media','user');
    }
}

我想用以下条件检索

"title LIKE '%just a text%' AND status_on='P' AND media_type=4 AND status='A'";

这是通过控制器方法访问媒体模型来完成的

$medium = media::find(array( "conditions" =>$conditions,
                "ORDER" => "modify_date DESC"));

我不断收到此错误

Column 'status' doesn't belong to any of the selected models (1), when preparing: SELECT [Media].* FROM [Media] WHERE title LIKE '%just a text%' AND status_on='P' AND status='A'

请问有人可以帮忙吗?我基本上想根据通常以

形式编写的2个表中的条件检索记录
SELECT * FROM media a, users b, WHERE a.user=b.user_id AND a.title LIKE '%just a text%' AND a.status_on='P' AND a.media_type=4 AND b.status='A'

谢谢。

【问题讨论】:

  • 这里没有足够的信息来回答您的问题。什么代码在那里产生错误

标签: php mysql model-view-controller phalcon


【解决方案1】:

您必须使用查询生成器来获得您想要的结果:我在下面创建了一个示例,您可能需要对其进行修改——我不确定我是否在 join 方法中得到了正确的连接列。

$media = $this->modelsManager->createBuilder()
    ->from('Media')
    ->join('Users', 'Media.media_id = Users.user_id', 'u')
    ->where("title LIKE '%just a text%'")
    ->andWhere("status_on='P'")
    ->andWhere("media_type=4")
    ->andWhere("u.status='A'")
    ->getQuery()
    ->execute();

更多说明请参考文档:https://docs.phalconphp.com/en/latest/reference/phql.html#creating-queries-using-the-query-builder

【讨论】:

    【解决方案2】:

    也可以通过使用子查询进行过滤来实现。 这可能不是最优雅的方式,但可以完成工作。

    Media::find([
        'conditions' => "title LIKE '%just a text%' AND status='A' AND user_id IN (SELECT user FROM [Media] WHERE [Users].user_id = user AND media_type=4)"
    ]);
    

    请记住方括号,如果您的模型有命名空间,您应该提供完整路径,例如 [ACME\Models\Media].user_id

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2014-03-14
      相关资源
      最近更新 更多