【问题标题】:Laravel Eloquent JoinsLaravel Eloquent 连接
【发布时间】:2014-05-08 08:41:06
【问题描述】:

我在核心 php 中有以下查询:

SELECT DISTINCT device_tocken FROM push_details JOIN users ON users.id=push_details.user_id

我必须将它集成到 laravel 4 中

应用程序已经有User extends Eloquent

我创建了如下的 Push_details 类

class Push_details extends Eloquent {

public $table = 'push_details';

public function User() {
    return $this->hasMany('\User','id');
}

}

    Table : users
        Primary key : id

    Table: push_details
        Primary key: id
        Foreign key: user_id belongsTo('users.id');

但我无法得到预期的结果。

还有一件事我还没有在用户模型中写任何东西。

【问题讨论】:

  • 你写过查询吗?有的话请发帖。
  • @Ravi 添加了答案
  • @Ravi 成功了???问题在于模型而不是查询

标签: php mysql laravel-4 eloquent


【解决方案1】:

连接表的唯一方法是......加入它,因为 Eloquent 关系不能使用连接工作,而是使用 WHERE IN 子句分隔查询。这样就可以了:

DB::table('push_details')
   ->select('device_tocken')
   ->distinct()
   ->join('users','users.id','=','push_details.user_id')
   ->get();

以上将返回stdObject's 中的array,因此或者如果您需要Eloquent CollectionEloquent 模型,因此将DB::table('push_details')->select... 替换为PushDetails::select...

现在,纠正你们的关系,因为它们是错误的:

// PushDetails model (as previously stated, I suggest renaming it to StudlyCase)
public function user() {
    return $this->belongsTo('\User','user_id'); // user_id is may be omitted here
}

// User model
public function pushDetails() {
    return $this->hasMany('\PushDetails','user_id'); // user_id is may be omitted here as well
}

【讨论】:

    【解决方案2】:
    1. 在您的User 模型中,您需要链接回PushDetails 模型,就像这样

      class User extends Eloquent {
          public function push_details() {
              return $this->belongsTo('PushDetails');
          }
      }
      
    2. 类名使用CamelCase,因为laravel有几个函数,其中CamelCase改成了snake_case

    3. 改变

      public function User() {
          return $this->hasMany('\User','id');
      }
      

        public function users() {
            return $this->hasMany('User');
        }
    

    有关更多信息,请参阅文档“Eloquent ORM”...

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 2019-09-06
      • 2023-03-07
      • 2018-08-07
      • 2019-12-06
      • 2021-01-05
      • 2016-07-22
      • 2018-11-06
      相关资源
      最近更新 更多