跨多个表的 phalcon 模型条件
phalcon model conditions across multiple tables
我是 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'
谢谢。
您必须使用查询构建器来获得您想要的结果:我在下面创建了一个示例,您可能需要修改它——我不确定我是否在连接方法中得到了正确的连接列.
$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
也可以通过使用子查询进行过滤来实现。
这可能不是最优雅的方式,但可以完成工作。
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
我是 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'
谢谢。
您必须使用查询构建器来获得您想要的结果:我在下面创建了一个示例,您可能需要修改它——我不确定我是否在连接方法中得到了正确的连接列.
$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
也可以通过使用子查询进行过滤来实现。 这可能不是最优雅的方式,但可以完成工作。
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