Join 防止Laravel重写主键

Join 防止Laravel重写主键,join,laravel,primary-key,Join,Laravel,Primary Key,好的,我遇到了一个问题,这是因为在执行联接时,Laravel覆盖了我的表页中的主键id。有没有办法在加入后保留页面的主键?我需要这些主键值完整地用于另一个查询 以下是我的表格结构: 朗斯 id pk- 名字- 代码 页数 id pk- 家长id fk- lang_parent_id fk- 主页界面 主页存储库 控制器 好吧,很抱歉我的前两个解决方案不起作用 我做了一些关于化名的研究 尝试: 首先在select函数中指定要选择的数据,然后使用get函数获取查询,并在其中指定列重命名 我已经用我的

好的,我遇到了一个问题,这是因为在执行联接时,Laravel覆盖了我的表页中的主键id。有没有办法在加入后保留页面的主键?我需要这些主键值完整地用于另一个查询

以下是我的表格结构:

朗斯 id pk- 名字- 代码

页数 id pk- 家长id fk- lang_parent_id fk-

主页界面

主页存储库

控制器


好吧,很抱歉我的前两个解决方案不起作用

我做了一些关于化名的研究

尝试:

首先在select函数中指定要选择的数据,然后使用get函数获取查询,并在其中指定列重命名


我已经用我的数据尝试过了,我得到了我认为你想要的东西。

嗨,丹尼斯,我尝试了'as'和'as',但在这两种情况下都出现了SQL语法错误=/你能公布你的错误吗?SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第1行中使用“as language\u id=pages.lang\u parent\u id,其中parent\u id为null,code”SQL:select*from pages internal join langs on langs.id as language\u id=pages.lang\u parent\u id,其中parent\u id为null,code=?绑定:数组0=>'pt',我已经编辑了我的答案,你能检查一下吗?我以为你有一个朗的模特。嗨,丹尼斯,我觉得你的第一个答案应该有用。我不知道如何使你的新建议对我有用。我想我要编辑我的问题以显示查询的上下文。$lang是我从uri中检索的一个变量,用于检查需要从数据库中获取的页面翻译,我并没有真正看到这种类型的foreach循环在这个对象上的有用性。至少在我的用例中。
namespace Repositories\MainPage;

interface MainPageInterface {
  public function getAllMainPages($lang);
}
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;
  }
}
$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));