2013-03-28 51 views
0

我想(沒有成功)執行一個連接+插入語句與流利的查詢生成器。這是有問題的代碼:Laravel 4 Fluent查詢生成器加入+插入

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

我假設流利Builder不預計連接和插入語句一起使用,因爲我找不到任何文檔。我找到的每個示例都使用與選擇連接。思考?

編輯

在我流利的發言只注意到一個錯誤。

->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 –