0

我正在尝试(没有成功)使用流利的查询生成器执行 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))

我假设流利的构建器不期望将 join 和 insert 语句一起使用,因为我找不到任何文档。我发现的每个示例都使用带有选择的连接。想法?

编辑

刚刚注意到我流利的陈述中有一个错误。

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

应该:

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

但是,错误仍然存​​在..

4

1 回答 1

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
));
于 2013-03-31T02:27:54.707 回答