【问题标题】:Eloquent ORM with Laravel雄辩的 ORM 与 Laravel
【发布时间】:2013-11-19 17:55:30
【问题描述】:

我是 laravel 世界的新手,我有一个问题。我没有在文档或谷歌中找到答案,所以请大家帮帮我。

这些 SQL 查询的 ORM 等效项:

 SELECT email FROM users WHERE username=test

和

 UPDATE users SET email=test@domain.com WHERE username=test

我是否需要在我的用户模型类中编写特定的函数,或者我只能使用用户模型类的对象来执行这些查询?

干杯

【问题讨论】:

    标签: php orm laravel eloquent


    【解决方案1】:

    有一些方法可以做你想做的事,请随意选择对你更有用的方法。

    使用方法链

    // For "SELECT email FROM users WHERE username=test"
    $email = User::where('username', 'test')->pluck('email');
    
    // For "UPDATE users SET email=test@domain.com WHERE username=test"
    User::where('username', 'test')->update( array( 'email'=>'test@domain.com' ) );
    

    对象

    // For "SELECT email FROM users WHERE username=test"
    $user = User::where('username', 'test')->first(); // Can be also an existing Eloquent object
    $email = $user->email;
    
    // For "UPDATE users SET email=test@domain.com WHERE username=test"
    $user = User::where('username', 'test')->first(); // Can be also an existing Eloquent object
    $user->email = "test@domain.com";
    $user->save();
    

    【讨论】:

      【解决方案2】:

      会是这样的:

      $user = User::where('username','test')->first();
      

      然后更新:

      $user = User::where('username','test')->first();
      $user->email = 'test@domain.com';
      $user->save();
      

      【讨论】:

      • 或在一行中更新:User::where('username','test')->first()->update(array('email' => 'test@domain.com '));
      • 请注意,这相当于select * from users,而不是select email from users。这是典型的 ORM,它遵循 Active Record 设计模式并假设您希望数据库行与业务逻辑实体(在本例中为用户)相关。如果您真的想只选择email 字段,您可能需要使用Query 对象,它不是ORM,而只是用于查询数据库的工具。
      猜你喜欢
      • 2014-06-22
      • 1970-01-01
      • 2015-03-15
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2016-02-26
      • 2016-08-27
      相关资源
      最近更新 更多