好的,我遇到的问题源于Laravel在执行Join时覆盖了我的表(页面)中的主键(id)。有没有办法在Join之后保留页面中的主键?我需要将这些主键值保存为另一个查询。
继承我的桌面结构:
LANGS id(pk) - 名称 - 代码
网页 id(pk) - parent_id(fk) - lang_parent_id(fk) -
MainPageInterface
namespace Repositories\MainPage;
interface MainPageInterface {
public function getAllMainPages($lang);
}
MainPageRepository
namespace Repositories\MainPage;
use Page;
class MainPageRepository implements MainPageInterface{
public function getAllMainPages($lang)
{
$mainPage = Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id')
->where('parent_id', null)
->where('code', '=', $lang)
->get();
return $mainPage;
}
}
控制器
use Repositories\CPage\CPageInterface;
use Repositories\MainPage\MainPageInterface;
class HomeController extends BaseController {
protected $cPage;
protected $mainPage;
public function __construct(CPageInterface $cPage, MainPageInterface $mainPage)
{
$this->cPage = $cPage;
$this->mainPage = $mainPage;
}
public function getPages($lang, $slug)
{
$cPage = $this->cPage->getCurrentPage($lang, $slug);
$mainPages = $this->mainPage->getAllMainPages($lang);
$allPages = $this->getAllPages($mainPages);
return View::make('index')
->with('cPage', $cPage)
->with('mainPages', $mainPages)
->with('allPages', $allPages);
}
private function getAllPages($pages) {
$allPages = array();
foreach ($pages as $page) {
$subArr = array();
$subArr['title'] = $page->title;
$subArr['slug'] = $page->slug;
$subPages = Page::where('parent_id', '=', $page->id)
->where('lang_parent_id', '=', $page->lang_parent_id)
->get();
if (!$subPages->isEmpty()) {
$result = $this->getAllPages($subPages);
$subArr['sub'] = $result;
}
$allPages[] = $subArr;
}
return $allPages;
}
}
答案 0 :(得分:0)
好的,对不起我的前2个解决方案无效。
我做了一些别名的研究。
尝试:
$mainPage = Page::join('langs', 'langs.id', '=', 'pages.lang_parent_id')
->where('parent_id', null)
->where('code', '=', $lang)
->select('langs.*', 'pages.*')
->get(array('langs.id AS language_ID));
首先指定要在select函数中选择的数据,然后使用get函数获取查询,并指定列重命名。
我已经用我的数据尝试过了,我得到了你想要的东西。