鍍金池/ 問答/PHP/ laravel控制器中使用eloquent的問題

laravel控制器中使用eloquent的問題

User.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
     protected $table = 'user';
     protected $primaryKey = 'id';
     public $timestamps = false;
     public function comments(){ 
         return $this->hasOne('App\Models\Comment', 'uid', 'uid');
     }
}

Comment.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
     protected $table = 'comment';
     protected $primaryKey = 'id';
     public $timestamps = false;
     public function comments(){ 
         return $this->hasMany('App\Models\User', 'uid', 'uid');
     }
}

我想在Test控制器中使用User模型中comments方法的數(shù)據(jù) 應(yīng)該怎么使用呢?

use App\Models\User;
class TestController extends Controller{
     public function test(){
       
  }
}
回答
編輯回答
舊言

1.Laravel中的hasOne是一對一的關(guān)系, 如果一個用戶只能評論一條,可以這么使用。
2.先將用戶查出來,然后再調(diào)用User Models中的comments方法,示例如下:

public function test(){
User::find($id)->comments;
}

如果是一個用戶可以評論多條則需要使用hasMany或belongsTo
具體使用方法可以參考laravel china手冊關(guān)聯(lián)關(guān)系章節(jié):
https://d.laravel-china.org/d...

2018年3月19日 06:34
編輯回答
萌面人

這是典型的一對多模型關(guān)聯(lián): Eloquent 關(guān)聯(lián):一對多

從你的源碼來看,你的映射關(guān)系是錯的,一個用戶肯定會發(fā)表多個評論,所以在 User model 中應(yīng)該是用 hasMany,

class User extends Model
{
     public function comments(){ 
         return $this->hasMany('App\Models\Comment', 'uid', 'uid');
     }
}

而對于 Comment 模型,每個評論只屬于一個用戶

class Comment extends Model
{
     public function user(){ 
         return $this->belongsTo('App\Models\User', 'uid', 'uid');
     }
}

拿到用戶的所有評論寫法如下:

class TestController extends Controller{
     public function test(){
       $user= User::find($id);
       $comments= $user->comments; //拿到該用戶的所有評論
  }
}

如果你拿到了一條評論數(shù)據(jù),要獲取到該評論的用戶模型,應(yīng)該是

class TestController extends Controller{
     public function test(){
       $comment= Comment::find($id);
       $user= $comment->user; //拿到該評論的所屬用戶
  }
}

其實在官方文檔中已經(jīng)說的比較清楚了,請認(rèn)真仔細(xì)閱讀文檔。

2018年1月9日 12:06