Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Laravel雄辩ORM在何处(子查询)_Mysql_Laravel_Eloquent - Fatal编程技术网

Mysql Laravel雄辩ORM在何处(子查询)

Mysql Laravel雄辩ORM在何处(子查询),mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我有以下SQL查询: SELECT * from db.tableA WHERE field in (SELECT id FROM db.tableB where other_field = value); 我想从表中选择,其中字段位于子查询返回的值数组中。问题是:我如何才能做到这一点与雄辩? 我目前的解决方案(我认为非常难看)如下: $a = \App\tableB::where("other_field", "=", $value)->select('id')->get();

我有以下SQL查询:

SELECT * from db.tableA WHERE field in (SELECT id FROM db.tableB where other_field = value);
我想从表中选择,其中字段位于子查询返回的值数组中。问题是:我如何才能做到这一点与雄辩? 我目前的解决方案(我认为非常难看)如下:

$a = \App\tableB::where("other_field", "=", $value)->select('id')->get();
$arr = array();
for ($i = 0; $i < count($a); $i++) array_push($arr, $a[$i]['id']);
$res = \App\tableA::whereIn("field", $arr)->get();
$a=\App\tableB::where(“其他_字段”、“=”、$value)->select('id')->get();
$arr=array();
对于($i=0;$iget();
有更好的方法吗


谢谢

让您的代码简化为

$arr = \App\tableB::where("other_field", "=", $value)->lists('id')->all(); 

$res = \App\tableA::whereIn("field", $arr)->get();

与all()链接的lists()将自动将集合转换为数组。但是使用laravel 5.0或更低版本,您不需要all()将集合转换为数组。

让您的代码简化为

$arr = \App\tableB::where("other_field", "=", $value)->lists('id')->all(); 

$res = \App\tableA::whereIn("field", $arr)->get();

与all()链接的lists()将自动将集合转换为数组。但是使用laravel 5.0或更低版本,您不需要all()将集合转换为数组。

一个查询比两个查询好

因此,下面执行一个查询,该查询在中有一个子查询,其中子句使用了eloquent:

\App\tableA::whereIn("field", function ($query) use ($value) {
    $query->select('id')
        ->from('table_b')
        ->where('other_field', $value);
})->get()

一个查询胜过两个查询

因此,下面执行一个查询,该查询在中有一个子查询,其中子句使用了eloquent:

\App\tableA::whereIn("field", function ($query) use ($value) {
    $query->select('id')
        ->from('table_b')
        ->where('other_field', $value);
})->get()

这不是子查询,而是一个附加查询。当在第一次查询中返回的记录数超过几个时(几个数,一百万?),您的应用程序将陷入困境。下面介绍如何创建子查询:它不执行子查询,而是执行附加查询。当在第一次查询中返回的记录数超过几个时(几个数,一百万?),您的应用程序将陷入困境。以下是如何创建子查询: