【问题标题】:How to map Eloquent with other tables?如何将 Eloquent 与其他表映射?
【发布时间】:2014-05-30 12:26:35
【问题描述】:

这是我第一次使用ORM,所以我想知道是否可以将它映射到其他表...

例如,我当前已登录用户。它通过链接表连接到POSTS 表。例如,如果我想选择帖子,我会像这样执行 sql:

SELECT
    `posts`.`id`', `posts`.`Name`, `posts`.`Description`
FROM
    `links`,
    `posts`
WHERE
    `links`.`user_id` = 1 AND `links`.`post_id` = `posts`.`id`

如何扩展 Eloquent,如果我请求 Posts::all() 它只会返回当前用户的帖子...

【问题讨论】:

    标签: orm laravel eloquent


    【解决方案1】:

    您可以在 POST 模态中定义 query scope

    public function scopeOfUser($query,$user_id)
    {
        return $query->join('links', 'links.post_id', '=', 'posts.id')
           ->where('links.user_id', '=', $user_id)
           ->select('posts.id', 'posts.Name', 'posts.Description');
    }
    

    然后像这样使用它:

    $posts = POST::OfUser(1)->get();
    

    【讨论】:

      【解决方案2】:

      你的帖子有点混乱,但我希望我的回答能如你所愿。

      警告:

      详情请参考 Laravel 的(多对多)Relationship documentation

      为简单起见并遵守 Laravel 约定,我强烈建议您使用 post_user 而不是 link 作为 数据透视表 (post_user表应该有 user_idpost_id 作为列)。

      您不必定义相应的枢轴模型(这是惯例)。

      以下模型旨在分别映射到表usersposts

      用户模型:

      在 app/model/user.php 中(已经存在,只需添加关系定义)

      class User extends Eloquent {
      
          ...
      
          public function posts()
          {
              return $this->belongsToMany('Post');
          }
      
          ...
      
      }
      

      后模型:

      在 app/models/post.php 中(当然要创建)。

      ...
      
      class Post extends Eloquent {
      
          public function users()
          {
              return $this->belongsToMany('User');
          }
      
      }
      
      ...
      

      检索用户的帖子:

      通常,您在 Laravel 中执行以下操作来获取当前登录的用户:

      $user = Auth::user(); // a User model / record
      

      假设 $user 是用户(模型)类型,您可以使用以下方法检索其所有帖子:

      $user->posts(); // a Collection
      

      【讨论】:

        猜你喜欢
        • 2022-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        相关资源
        最近更新 更多