2013-03-28 4 views
0

유창한 쿼리 작성기로 join + insert 문을 실행하려고합니다 (성공하지 못했습니다). 여기에 잘못된 코드 :Laravel 4 Fluent Query Builder Join + Insert

DB::table('lnk_users_languages') 
    ->join('lut_languages', 'lnk_users_languages.lang_id', '=', 'lut_languages.id') 
    ->where('lut_languages', 'lut_languages.lang_code', '=', 'en') 
    ->insert(array(
    'user_id' => Auth::user()->id, 
    'lang_id' => DB::raw('lut_languages.id') 
)); 

그리고 여기 내 데이터베이스 구조 :

mysql> DESCRIBE lut_languages; 
+-----------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-----------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| lang_code | varchar(2)  | NO | UNI | NULL |    | 
| lang_name | varchar(30)  | NO |  | NULL |    | 
| dominant | tinyint(1)  | NO |  | NULL |    | 
+-----------+------------------+------+-----+---------+----------------+ 

mysql> DESCRIBE lnk_users_languages; 
+---------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+---------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| user_id | int(10) unsigned | NO | MUL | NULL |    | 
| lang_id | int(10) unsigned | NO | MUL | NULL |    | 
+---------+------------------+------+-----+---------+----------------+ 

그리고 마지막으로 여기에 오류가 나는 나타날 수

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'lut_languages.id' in 'field list' (SQL: insert into `lnk_users_languages` (`user_id`, `lang_id`) values (?, lut_languages.id)) 

나는 유창 빌더하지 않는 가정 거기에 어떤 문서도 찾을 수 없으므로 조인과 삽입 문을 함께 사용하기를 기대하십시오. 찾을 수있는 모든 예제는 선택 항목과 조인을 사용합니다. 생각?

편집 그냥 내 유창 문에서 오류를 발견했습니다.

->where('lut_languages', 'lut_languages.lang_code', '=', 'en') 

은 다음과 같아야합니다

->where('lut_languages.lang_code', '=', 'en') 

그러나, 오류가 계속 발생 ..

답변

0

그래, 수행 스트립 삽입에 가입하고 문을 삭제합니다. 나는 그것을 고칠 티켓을 열었지만 모든 SQL 문법이 지원하는 것은 아닙니다. 그것이 MSSQL 또는 Postgre인지 확실히 말할 수는 없습니다. 어쨌든, 받아 들여지지 않았습니다.

먼저 언어 코드를 검색 한 다음 조인하지 않고 삽입하는 것이 좋습니다. 성능이나 코드 크기에 별다른 영향을 미치지 않습니다.

$language = DB::table('lut_languages')->where_lang_code($code)->first(); 
$user_language = DB::table('lnk_users_languages')->insert(array(
    'user_id' => Auth::user()->id, 
    'lang_id' => $language->id 
)); 
+0

오, 그건 수치스러운 일입니다. 당신이 말했듯이, 그것은 그다지 성능에 영향을주지 않을 것입니다. 나는 순수하게 호기심을 만족 시키려고했다. 감사합니다 –

+0

는 (는) 고정 된 것처럼 보입니다. https://github.com/laravel/framework/commit/57e11e392447206f60d77b33c0646229842315a3 –