2014-11-12 6 views
1

Хорошо, у меня проблема, связанная с тем, что 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; 
    } 
} 

ответ

0

Хорошо, я сожалею, мои первые 2 решения не работают.

Я провел некоторое исследование для создания псевдонима.

Try:

$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)); 

Сначала вы указать данные, которые будут выбраны в функции выбора, а затем вы получите запрос с помощью функции GET, и указать столбец переименовывает там.

Я пробовал это с моими данными, и я получаю то, что, как я думаю, вы хотите.

+0

Привет, Деннис, я пробовал как «как», так и «AS», но в обоих случаях получил синтаксическую ошибку SQL. =/ –

+0

Можете ли вы высказать свою ошибку? Я сам не пробовал. –

+0

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 ',)) –

Смежные вопросы