php - Laravel - 一对多关系

标签 php laravel laravel-5.1

我的关系出现问题,返回以下错误:

Call to undefined method Illuminate\Database\Query\Builder::ftpAccounts()

这是我的模型:

客户模型

class Customer extends Model
{

    protected $table = 'customers';

    protected $fillable = [
        'name',
        'email',
        'phone',
        'status',
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function ftpAccounts()
    {
        return $this->hasMany(FTPAccounts::class);
    }
}

FTP 帐户模型

class FTPAccounts extends Model
{
    protected $table = 'ftp-accounts';

    protected $fillable = [
        'host',
        'user',
        'password',
        'status',
    ];

    public function customer()
    {
        return $this->belongsTo(Customer::class);
    }
}

我的 Controller :

class AdminFTPAccountsController extends AdminBaseController
{
    private $repository;

    public function __construct(FTPAccountsRepository $repository)
    {
        parent::__construct();
        $this->repository = $repository;
    }

    public function index()
    {
        return view('admin.pages.admin.clientes.ftp.index', [
            'customers' => $this->repository->allFTPAccounts(),
            'title' => 'TESTE'
        ]);
    }

    public function getCreate()
    {
        return view('admin.pages.admin.clientes.ftp.create', [
            'title' => 'Nova conta FTP'
        ]);
    }

    public function postCreate(CustomerFTPAccountCreateRequest $request)
    {
        $request->user()->customers()->ftpAccounts()->create([
            'host' => $request->host,
            'user' => $request->user,
            'password' => $request->password,
        ]);

        return redirect('admin/clientes');
    }
}

它可以是什么?我做错了什么吗?

## 编辑 01 ##

用户模型:

class User extends Model implements AuthenticatableContract,
                                    AuthorizableContract,
                                    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword;

    protected $table = 'users';

    protected $fillable = ['name', 'email', 'phone', 'password', 'status'];

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

//    protected $casts = ['status' => 'boolean'];

    public function articles()
    {
        return $this->hasMany(Article::class);
    }

    public function customers()
    {
        return $this->hasMany(Customer::class);
    }
}

最佳答案

你可以这样做:

$customers = $request->user()->customers;


foreach($customers as $customer)
{
    $customer->ftpAccounts()->create([
            'host' => $request->host,
            'user' => $request->user,
            'password' => $request->password,
        ]);

}

这会让您抢先一步。

关于php - Laravel - 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35799413/

相关文章:

php - 表格中的重复条目

AWS Elastic Beanstalk 中的 Laravel .env

php - Laravel 5.1 - 验证用户名、密码,如果确认 = 1

session - Laravel 5.1 使用 session.upload_progress

php - 读取带括号的 header 时,PHP 的 imap_fetch_overview() 函数是否有错误?

php - 限制已经出现在在线考试系统中的学生参加考试

php - 当未明确给出新值时,让字段采用另一个字段的值

Laravel:注销特定用户

php - 如何安装 PHP-Laravel homestead vagrant box?

javascript - 如何加载所选下拉值ajax的所有匹配数据行