Laravel 5.3+;Sentinel:Builder.php第2450行中的BadMethodCallException

Laravel 5.3+;Sentinel:Builder.php第2450行中的BadMethodCallException,php,laravel,laravel-5,laravel-5.3,sentinel,Php,Laravel,Laravel 5,Laravel 5.3,Sentinel,我正试图通过遵循互联网上的一些指南来构建我的第一个Laravel应用程序,我觉得我遗漏了一些明显的东西。这是代码 错误 <?php namespace App\Http\Controllers; use App\CustomerAddress; use Illuminate\Http\Request; class CustomerAddressController extends Controller { public function create(Request $reque

我正试图通过遵循互联网上的一些指南来构建我的第一个Laravel应用程序,我觉得我遗漏了一些明显的东西。这是代码

错误

<?php
namespace App\Http\Controllers;
use App\CustomerAddress;
use Illuminate\Http\Request;

class CustomerAddressController extends Controller
{
    public function create(Request $request)
    {
        $address = new CustomerAddress();
        $address->address = $request['address'];
        $request->user()->addresses()->save($address);
    }
}
Builder.php第2450行中的BadMethodCallException:调用未定义 方法\Database\Query\Builder::addresses()

用户模型

<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Sentinel;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'email', 'password',
    ];

    protected $hidden = [
        'password', 
        'remember_token'
    ];

    public function addresses()
    {
        return $this->hasMany('App\CustomerAddress');
    }
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class CustomerAddress extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}
有什么想法吗?谢谢和干杯

  • 在.config/cartalyst.sentinel.php中,将
    'model'=>'cartalyst\sentinel\Users\EloquentUser'
    更改为
    'model'=>'App\User'
    以使用定义了
    地址关系的用户模型
  • 在./app/User change
    User extends authenticable
    User extends\Cartalyst\Sentinel\Users\EloquentUser
    中,将Sentinel的用户扩展到应用程序的用户模型
  • 最后,您的控制器代码现在应该是
`$address=新CustomerAddress(); $address->address=$request->input('address')

$request->user()->addresses()->save($address)`


所有的东西都应该是桃色的

在请求之前你需要$address->save()->user()->address()->save($address);还可以使用$request->input('address')。客户地址表上还应该有一个user\u id字段。嘿,感谢您的快速回复。添加$address->save()会显示另一条错误消息,客户地址表中有一列“字段'user\u id'没有默认值(SQL:insert-into
customer\u addresses
address
updated\u at
created\u at
)值(asdasd,2016-12-24 02:54:342016-12-24 02:54:34)),即使在CustomerAddress-model.Try$request->user()->addresses()->associate($address)中将“地址”添加到可填充项之后;相反,让我们看看嘿!上面的内容对我很有用,但是我有一个与最后一段代码相关的问题。为什么我需要先将地址保存在表中($address->save()),然后通过$request->user()->addresses()->save($address)将用户id添加到表中?这是否会导致执行两(2)个insert查询?如果没有$address->save(),它对我来说也很好。干杯,谢谢!同时,一次插入所有内容并不需要表中user_id的null属性。我不知道,我可能只是错过了一些重要的东西。你是对的,添加$address->save()是我需要user\u id为空的原因。如果删除$address->save(),它应该可以正常工作,而用户id不可为空。我希望这一切都会好起来!也许我终于明白了。再次感谢你的帮助。干杯
$request->user()->addresses()->save($address);