PostController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Tpost;
class PostController extends Controller
{
public function createUserPost(Request $request){
$this->validate($request,[
'post'=>'required'
]);
$tpost =new Tpost();
$tpost->body =$request['post'];
$message = "something wrong";
if($request->tuser()->tposts()->save($tpost)) //problem is there
{
$message = "post Successfully Submited";
}
return redirect()->route('dashboard')->with('message',$message);
}
}
Tpost.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tpost extends Model
{
//
public function tuser(){
return $this->belongsTo('App\Tuser');
}
}
Tuser.php
<?php
namespace App;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class Tuser extends Model implements Authenticatable
{
use \Illuminate\Auth\Authenticatable;
public function tposts(){
return $this->hasMany('App\Tpost');
}
收到错误:Macroable.php第81行中的BadMethodCallException:方法 tuser不存在。
//如果我使用
$tpost ->save();
//简单地插入数据库//我以为我没有建立关系 在Tuser和Tpost模型之间。 在PostController.php中,如果我
dd($tpost->tuser());
,它返回一个关联数组,如图所示,但如果dd($request->tuser());
,则表示方法tuser不存在。 请帮帮....
答案 0 :(得分:1)
你的方法调用中有一个拼写错误,正是在你写“问题就在那里”的地方。它应该是:
if($request->tuser()->tposts()->save($tpost))
编辑 -
从错误消息判断,很明显Laravel认为你在$ request实例上要求tuser()方法,这显然不存在。
你能用:
Auth::user()->tposts()->save($tpost)
如果这不起作用,我建议确保config / auth.php文件反映您的特定用例,特别是User Providers部分。