关于laravel批处理及MySQL多表链接查询解析
一、Larave的批处理
Laravel的批处理使用的是 <B>Eloquent</B>;
用它检索指定表中的指定数据:
表中的数据信息通过在Model中定义指定参数名
<br>
<br>
//数据库链接方式;
protected $connection = 'addr';
<br>
<br>
//表名<br>
protected $table = 'students';
<br>
<br>
//约束主键<br>
protected $primaryKey = 'id';
<br>
<br>
//可被批量赋值的属性;<br>
protected $fillable = ['name', ...];
原代码如下:
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $connection = 'addr';//数据库链接方式;
protected $table = 'students';//表名
protected $primaryKey = 'id';//约束主键
protected $fillable = ['name'];//可被批量赋值的属性;
}
在控制器中引用
use AppUser;
代码实现:
查询所有,我那张表中有一万数据将全部输出
public function testSelect()
{
set_time_limit(0);
$Info = User::all();
dd($Info);
}
Collection {#10186 ▼
items: array:10000 [▼
0 => User {#10187 …26}
1 => User {#10188 …26}
2 => User {#10189 …26}
3 => User {#10190 …26}
4 => User {#10191 …26}
5 => User {#10192 …26}
6 => User {#10193 …26}
7 => User {#10194 …26}
8 => User {#10195 …26}
9 => User {#10196 …26}
10 => User {#10197 …26}
...
注意: 在批处理中,批量插入是可以的,但条件是值一致,若值不一致则用循环单个插入,那会相当消耗性能; 解决方案就是使用原生的MySQL语句拼接;
更多关于laravel的批处理链接 原文
二、MySQL多表链接查询解析
SELECT
oi.user_id AS 用户ID,
ub.bonus_type_id AS 红包类型ID,
c.type_name AS 红包类型名称,
count(ub.bonus_type_id) AS 使用次数
FROM
sdx_order_info oi
LEFT JOIN sdx_user_bonus AS ub ON ub.bonus_id = oi.bonus_id
LEFT JOIN sdx_bonus_type AS c ON c.type_id=ub.bonus_type_id
WHERE 1=1
AND ub.bonus_id>0
AND oi.pay_time >= (UNIX_TIMESTAMP('2018-03-09') - 28800)
AND oi.pay_time < (UNIX_TIMESTAMP('2018-03-16') - 28800)
AND oi.pay_status IN (2,3,4) -- 付款状态(2-已付款 3-部分退款)
AND oi.order_status IN (1,2,5,6) -- 订单状态(1-已确认 5-已分单)
GROUP BY oi.user_id,ub.bonus_type_id,c.type_name
ORDER BY oi.user_id ASC
1、需要查询的信息字段除了在 select 中写入之外,还要在最下面的Group By 中写入,若不写入,则在原生SQL语句中会报错。
2、两表之间的关联性 ON 条件一定要具备 <b>单一性,共有性</b>
还可以多个条件相关联,如:
ON ub.bons_id = oi.bons_id And ub.user_id = oi.user_ID
3、三表关联方法如上代码所示,不应该将LeftJoin放在最后,那是错误的写法。
4、在完成一个表的查询操作时应该对其进行合理的排序。
5、若导出表,则尽量为.xslx格式,因为office使用的格式是如此,更显合理性和专业性