有人可以解释一下Laravel的关系如何运作?

时间:2016-07-27 20:05:51

标签: php laravel

当我保存帖子时,它会保存发布它的用户的ID。 这很好,但我不明白如何。

发布控制器

# Log in to the server.  This can be done only once.

   wget ‐‐cookies=on ‐‐save-cookies cookies.txt ‐‐keep-session-cookies ‐‐post-data ‘user=un&password=password’ http://example.com/file.zip


   # Now grab the file using below

   wget --no-check-certificate --load-cookies cookies.txt \
    -p https://dummyurl.com/dummyfile.zip

用户模型

<?php

   namespace App\Http\Controllers;
   use Illuminate\Http\Request;
   use App\Post;

   class PostController extends Controller
   {
      public function postCreatePost(Request $request)
      {

        $post = new Post();
        $post->body = $request['body'];
        $request->user()->posts()->save($post); //i cant understand this line
        return redirect()->route('dashboard');
      }
   }

?>

发布模型

<?php

   namespace App;

   use Illuminate\Contracts\Auth\Authenticatable;
   use Illuminate\Database\Eloquent\Model;

   class User extends Model implements Authenticatable
   {
      use \Illuminate\Auth\Authenticatable;

      public function posts()
      {
         return $this->hasMany('App\Post'); // ?
      }
   }

我不明白属于谁并且有很多关系。 如果有人能向我解释,我将非常感激。

2 个答案:

答案 0 :(得分:3)

  • 在这种情况下,hasMany表示它会在many表的the user id列中找到user_idposts

  • belongsTo只是意味着它会在user表中找到与id匹配的users,其中user_id列与posts related row列相匹配$request->user()->posts()->save($post);

最后,->save($model)

  • 获取请求
  • 从请求中获取用户
  • 获取用户的帖子

->save($object)有点诡计。这要求传递给posts()函数的对象是关系的实例。在我们的示例中,关系为$post,因此App\Post只需要是Models的实例(或this.echo()命名空间的任何位置)。

答案 1 :(得分:1)

您可以在official documentation和&#34; Eloquent Relationships&#34;章节中找到解释。来自书&#34; Code Smart&#34; (Laravel 4)。

您可以找到更多资源in Google