微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我的问题是在Laravel框架中加入2个表.一个是动态名称表(它是一个变量),第二个是复合主键.我必须使用查询生成器而不是where().请查看我的以下详细信息:

我有2张桌子:

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

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

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

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

<?PHP 
$type = Input::get('type',null);
$table = $type . '_details';
$results =  \DB::table($table)
                ->join('links',function($join)
                {
                    // the following code will show errors undefined $table
                    $join->on($table . '.source_id','links.source_id');
                    $join->on($table . '.brand_id','links.brand_id');
                })
                ->get();

?>

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

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

注意这一行:

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

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

你可以在docs找到它.

原文地址:https://www.jb51.cc/laravel/134664.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。