php – Laravel – 使用复合主键加入表

前端之家收集整理的这篇文章主要介绍了php – Laravel – 使用复合主键加入表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是在Laravel框架中加入2个表.一个是动态名称表(它是一个变量),第二个是复合主键.我必须使用查询生成器而不是where().请查看我的以下详细信息:

我有2张桌子:

  1. CREATE TABLE `details` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,`source_id` int(10) unsigned NOT NULL,`brand_id` int(10) DEFAULT NULL,PRIMARY KEY (`id`)
  3. );
  4. CREATE TABLE `links` (
  5. `source_id` int(10) unsigned NOT NULL,`brand_id` tinyint(3) unsigned NOT NULL DEFAULT '1',PRIMARY KEY (`source_id`,`brand_id`)
  6. );

现在,我需要加入2个这些表,我使用这个代码

  1. <?PHP $results = \DB::table('details')
  2. ->join('links',function($join)
  3. {
  4. $join->on('details.source_id','=','links.source_id');
  5. $join->on('details.brand_id','links.brand_id');
  6. })
  7. ->get();?>

加入这些表非常简单,好的.但我的问题是表名是动态的.

  1. <?PHP
  2. $type = Input::get('type',null);
  3. $table = $type . '_details';
  4. $results = \DB::table($table)
  5. ->join('links',function($join)
  6. {
  7. // the following code will show errors undefined $table
  8. $join->on($table . '.source_id','links.source_id');
  9. $join->on($table . '.brand_id','links.brand_id');
  10. })
  11. ->get();
  12.  
  13. ?>

请帮我解决这个问题.
非常感谢!!!

您需要将变量从本地范围导入到匿名函数的范围,这是如何:
  1. $results = \DB::table($table)
  2. ->join('links',function($join) use ($table)
  3. {
  4. $join->on($table . '.source_id','links.brand_id');
  5. })
  6. ->get();

注意这一行:

  1. ->join('links',function($join) use ($table)

问题是匿名函数不知道变量$table,所以你用它来告诉它变量.

你可以在docs找到它.

猜你在找的Laravel相关文章