Php 参数从控制器传递到laravel中的模型,但不起作用

Php 参数从控制器传递到laravel中的模型,但不起作用,php,laravel,eloquent,parameters,relationship,Php,Laravel,Eloquent,Parameters,Relationship,在我的控制器中,参数通过构造方法传递给用户模型中的posts函数 class MyController extends Controller { private $user; public function __construct(User $getuser) { $this->user = $getuser; } public function index($id = 2) { $posts = $this-

在我的控制器中,参数通过构造方法传递给用户模型中的posts函数

class MyController extends Controller
{
    private $user;
    public function __construct(User $getuser)
    {
        $this->user = $getuser;
    }
    public function index($id = 2)
    {
        $posts = $this->user->posts($id);
        $user = User::FindOrFail($id);
        return $user->posts;
    }
}
在我的用户模型中,参数被访问并传递给关系

class User extends Authenticatable
{
    use Notifiable;
    
    protected $fillable = [
        'name', 'email', 'password',
    ];

    function posts($id)
    {
        return $this->hasMany('App\Post')->where('id',$id);
    }
}
像这样使用它就可以了

“return$this->hasMany('App\Post')->where('id',1);”

但不使用传递的参数。获取此错误

“Symfony\Component\Debug\Exception\fatalthrowable错误太少 函数App\User::posts()的参数,传入0 C:\xampp\htdocs\blog\vendor\laravel\framework\src\illumb\Database\eloont\Concerns\HasAttributes.php 在第415行,正好是1“

用户模型

function posts($id)
{
   return $this->hasMany('App\Post');
}
您可以使用relation方法上的where访问具有给定条件的帖子

查询关系

如果您想要一个拥有满足条件的帖子的用户

$user = User::whereHas('posts', function($query) use($id){
         $query->where('id', $id);
         // You may add several other conditions as well.
      })
      ->with(['posts' => function($query) use($id){
           $query->where('id', $id);
         }
      ])
      ->first();
现在,


检查您应该返回的控制器方法。ie:
return$posts
而不是
return$user->posts
,因为这是在不传递id的情况下查找posts,就像您使用
$posts=$this->user->posts($id)一样


这就是为什么在
return$user->posts

中没有传递任何参数时,会出现参数太少的symphony错误。很抱歉,我不明白,您能解释一下吗?同样,上述方法解决了你的目的,我认为如果你这样做会更好,因为如果你想访问某个地方的所有帖子,它也可以让你这样做,对于获得一篇帖子,你可以随时查询关系。我希望有帖子和帖子的用户应该根据参数。比如$user=user::whereHas('posts')->find($id);返回$user;你可以像我说的那样保持同样的关系。它给了你更多的自由,因为它不会被简单地限制为使用一个id,你可以随意添加多个条件。我将在解决方案中编写一个示例。然后让我知道你是否需要。return$user->posts($id)
$user = User::whereHas('posts', function($query) use($id){
         $query->where('id', $id);
         // You may add several other conditions as well.
      })
      ->with(['posts' => function($query) use($id){
           $query->where('id', $id);
         }
      ])
      ->first();
$user->posts

will give a collection of only ONE post Model Instance that satisfied the condition