一文读懂 Laravel 模型类与 tp5.0 模型用法 
                                                    
                        
                    
                    
  
                    
                    一文读懂 Laravel 模型类与 tp5.0 模型用法
本文编写时间:2023-06-08
需求
想学习两种 ORM 的使用方式,以便遇到哪种框架都能快速实现功能。
代码部分
模型类
// 下面Laravel                  
class User extends Model
{
    protected $table = 'users';
    protected $guarded = [];
    public function orders()
    {
        return $this->hasMany(Order::class, 'user_id');
    }
}
class Order extends Model
{
    protected $table = 'orders';
    protected $guarded = [];
    public function user()
    {
        return $this->belongsTo(User::class, 'user_id');
    }
}
// 下面tp
class User extends Model
{
    protected $table = 'users';
    public function orders()
    {
        return $this->hasMany('Order', 'user_id');// 注意这里,必须字符串。
    }
}
class Order extends Model
{
    protected $table = 'orders';
    public function user()
    {
        return $this->belongsTo('User', 'user_id');
    }
}查询与集合
// 下面Laravel                  
$user = User::find(684);
// 单条 的另一种写法
$user = User::where('id',684)->first();  // 注意 first
$order_list = $user->orders()->limit(2)->orderBy('id','desc')->get();//注意排序
echo $order_list instanceof Collection;//1
echo "<br>";
echo $order_list->count();//2
echo "<br>";
echo $order_list->first()->created_at;//2023-02-11 16:08:12
echo "<br>";
// 下面tp5.0
$user = User::find(684);// 也可以 $user = User::get(684);
// 单条 的另一种写法
$user = User::where('id',684)->find(); // 注意find
$order_list = $user->orders()->limit(2)->order('id','desc')->select();//排序。
$order_list = collection($order_list);
echo $order_list instanceof Collection;// 1
echo "<br>";
echo $order_list->count();// 2
echo "<br>";
echo $order_list[0]->created_at;//2023-02-11 16:08:12,没有first方法,
echo "<br>";
模型关联的使用示例。
// 下面Laravel
// 查有路上订单的用户数。
$user_count = User::query()->whereHas('orders',function ($query){
    $query->where('delivery_status','on_the_way');
})->count();
echo $user_count. "<br>";//5
// 查订单id小于100 的用户数量。
$user_count = User::query()->whereHas('orders',function ($query){
    $query->where('id','<',100);
})->count();
echo $user_count. "<br>";//12
// 下面tp5.0
// 查有路上订单的用户数。
$user_count = User::hasWhere('orders',function ($query){ //方法名 hasWhere
    $query->where('delivery_status','on_the_way');
})->count();
echo $user_count. "<br>"; //5
// 查订单id小于100 的用户数量。
$user_count = User::hasWhere('orders',function ($query){
    $query->where('Order.id','<',100); // 注意这里的差异,必须带类名。
})->count();
echo $user_count. "<br>";//12// 新增和删除,感谢上帝,这是一样的。
// 新增。
$order = new Order([
    'date'=>time(),
    'express_info'=>mt_rand(1,100),
    'shipping_type'=>1,
]);
$order->save();
echo $order->id;
$order = Order::find(421);
$order->delete();下面是模型修改
// 下面laravel。
$order = Order::find(421);
$order->update([
    'express_info'=>mt_rand(1,100),
]);
$order->increment('express_info', 10);
echo "<br>" . $order->express_info;
// 下面tp5.0
// 修改。必须save!
$order = Order::find(421);
$order->save([
    'express_info'=>mt_rand(1,100),
]);
// 自增,方法名不同。
$order->setInc('express_info', 10);
echo "<br>" . $order->express_info;下面是静态修改,注意静态,完全一致。
// 下面laravel
Flight::where('active', 1)
      ->where('destination', 'San Diego')
      ->update(['delayed' => 1]);
// 下面tp
User::where('id', 1)
    ->update(['name' => 'thinkphp']);事务与悲观锁。
// 下面laravel
DB::beginTransaction();
$user = User::lockForUpdate()->find(1);
// 对user处理。。。
// ...
DB::commit(); // 或 DB::rollBack();
// 下面tp
Db::startTrans();
$order =  Order::where('id',421)->lock(true)->find(); // 或 $order =  Order::lock(true)->find(421);
$order->setInc('express_info', 10);
Db::commit(); // Db::rollback();
总结
- 都很棒,我谁也不得罪 
- 完全相同的是模型新增,模型删除,静态修改。
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           yyy123456 的个人博客
 yyy123456 的个人博客
         
             
             
             
                     
                     
             
         
             
         
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: