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