【发布时间】:2020-03-08 02:37:56
【问题描述】:
我有 2 个具有简单 one to many 关系的表。
用户表:
id (primary key)
-- other columns ...
帖子表:
id (primary key)
user_id
-- other columns ...
在用户模型中我有:
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function postsbla() {
return $this->hasMany('App\Post');
}
}
在 Post 模型中我有:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function userbla() {
return $this->belongsTo( "App\User",'user_id', 'id' );
}
}
然后,我有一个控制器:
use App\User;
use App\Post;
public function index()
{
$a = true;
if($a) { // case 1
$user_id = 1;
$user_posts = User::find( $user_id )->postsbla;
var_dump($user_posts); exit;
}
else { // case 2
$post_id = 5;
$post_owner_user_data = Post::find( $post_id )->usersbla;
var_dump($post_owner_user_data); exit;
}
}
如果$a === true(情况1)则自定义方法名称postsbla()有效且var_dump返回有效对象,但如果$a === false(情况2)则自定义方法名称usersbla()无效并返回NULL。
附:
如果我使用的不是usersbla 名称,而是user,那么案例2 也可以工作并提供有效对象。
请告诉我,为什么我可以为案例 1 使用自定义方法名称,而不能为案例 2 使用?
【问题讨论】:
-
你能给你的桌子图片吗?????
-
顺便说一句,laravel 有函数
dd($someData)转储数据并死掉。用它代替var_dump($someData); exit; -
你的帖子模型中有
user关系吗? -
@OTAR 因为在 belongsTo 的情况下,Laravel “通过检查关系方法的名称并在方法名称后加上 _id 来确定默认的外键名称。”。
-
@OTAR in case of hasMany "Eloquent 将采用拥有模型的 "snake case" 名称并以 _id 为后缀。"
标签: php laravel laravel-5 eloquent relationship