Хорошо, у меня проблема, связанная с тем, что Laravel переопределяет первичный ключ (id) из моей таблицы (страниц) при выполнении Join. Есть ли способ сохранить первичный ключ со страниц после Join? Мне нужны эти значения первичного ключа для другого запроса.Предотвращение переадресации первичного ключа Laravel
Heres моя структура таблицы:
Langs идентификатор (рк) - имя - код
страницы идентификатор (рк) - parent_id (Fk) - lang_parent_id (Ф.К.) -
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;
}
}
Привет, Деннис, я пробовал как «как», так и «AS», но в обоих случаях получил синтаксическую ошибку SQL. =/ –
Можете ли вы высказать свою ошибку? Я сам не пробовал. –
SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'как 'language_id' =' pages'.'lang_parent_id', где 'parent_id' имеет значение null и' code'' в строке 1 (SQL: select * from 'pages' inner join' langs' на 'langs'.'id' как' language_id' = 'pages'.'lang_parent_id' где' parent_id' равно null и 'code' =? pt ',)) –