我很难理解Phalcon中的连接。我不确定我是否需要使用连接或者是否以某种方式自动映射相关表。我以前总是避免使用ORM,所以这个概念对我来说有点新鲜了!
我有两个表 - 页面和部分
class Pages extends \Phalcon\Mvc\Model {
public $page_id;
public $page_section_id;
public $page_title;
public $page_url;
public $page_description;
public $page_tags;
public $page_content;
public $page_time;
public $page_author;
public $page_views;
public function initialize() {
$this->belongsTo('page_author', 'users', 'id');
$this->belongsTo('page_section_id', 'sections', 'section_id');
}
}
和
class Sections extends \Phalcon\Mvc\Model{
public $section_id;
public $section_title;
public $section_url;
public $section_description;
public $section_tags;
public function initialize(){
$this->hasMany('section_id', 'pages', 'page_section_id');
}
}
然后在我的控制器中我有
$pages = $this->modelsManager->createBuilder()
->from('Baseapp\Backend\Models\Pages')
->leftJoin('Baseapp\Backend\Models\Sections', 'section.section_id = Baseapp\Backend\Models\Pages.page_section_id', 'section')
->orderBy('page_time DESC')
->getQuery()
->execute()
->toArray();
print_r($pages);exit; // <- let's see what we get here
我正在使用$this->modelsManager->createBuilder()
,因为我似乎无法加入它!
在视图中我会使用
{% for page in pages %}
<div class="item">
<div class="content">
<div class="header">
{{ page.page_title }} - {{ page.section_title }}
</div>
</div>
</div>
{% endfor %}
这里最大的问题是它只返回页面数据而不是相关的部分数据。换句话说,连接似乎没有起作用。
那么我该如何进行简单连接,或者是否有一些更好的方法可以忽略连接使得连接多余?
答案 0 :(得分:1)
在模型中,您需要创建一个方法,例如
/**
* Returns users which doesn't belong to any organization.
*
* @return mixed
*/
public static function getSomething()
{
$query = User::query()
->columns(__NAMESPACE__ . '\Pages.*')
->leftJoin(__NAMESPACE__ . '\Sections', __NAMESPACE__ . '\Pages.page_section_id = ps.section_id', 'ps')
->where('do something')
->execute();
if ($query->count()) {
return $query;
}
return false;
}