4

im новичок в laravel. никогда раньше не работал с каркасом. Я создал базу данных с именем «tabletest». он имеет две таблицы. одна из них - таблица пользователей, а другая - таблица table.user для телефона имеет два столбца (идентификатор и имя). Телефонный стол имеет 3 столбца (id phone и user_id). то, что я пытался, я возьму ввод с помощью формы и отправлю входы в таблицы базы данных. хотя имена и телефоны были сохранены в разных таблицах правильно, user_id, который является столбцом внешнего ключа, не обновлялся. всегда было 0. Что мне теперь делать?Laravel 5.1 модель красноречивых отношений - как обновить колонку внешнего ключа?

файлов миграции являются:

пользователь таблице:

public function up() 
    { 
     Schema::create('user', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->timestamps(); 
     }); 
    } 

телефон стол:

public function up() 
    { 
     Schema::create('phone', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('phone'); 
      $table->unsignedInteger('user_id'); 
      $table->timestamps(); 
     }); 
    } 

модель Пользователь:

use App\Model\Phone; 
class User extends Model 
{ 
    protected $table = "user"; 
    protected $fillable = ['name']; 

    public function phone(){ 
    return $this->hasOne(Phone::class); 
    } 
} 

Модель телефона:

use App\Model\User; 
class Phone extends Model 
{ 
    protected $table = "phone"; 
    protected $fillable = ['phone','user_id']; 

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

PhoneController.php

<?php 

    namespace App\Http\Controllers; 

    use Illuminate\Http\Request; 

    use App\Http\Requests; 
    use App\Http\Controllers\Controller; 
    use App\model\User; 
    use App\model\Phone; 
    class PhoneController extends Controller 
{ 
    public function store(Request $request) 
     { 
      User::create([ 

       'name' => $request->name 
       ]); 
      Phone::create([ 
       'phone' => $request->phone 
       ]); 
     } 
} 

здесь скриншот телефона таблицы: phone table

ответ

2

Вы никогда не указать, какой пользователь вы создаете номер телефона. Даже если у вас есть внешний ключ, это только индексирует и ограничивает столбец user_id. MySQL не может «прочитать» ваш php-код и предположить, для какого пользователя вы создали номер телефона.

Есть несколько вариантов.

Один вы можете сделать это:

$user = User::create([ 
    'name' => $request->input('name') 
]); 

Phone::create([ 
    'phone' => $request->phone, 
    'user_id' => $user->id 
]); 

Или другой способ:

$user = User::create([ 
     'name' => $request->input('name') 
    ]); 

$user->phone()->create([ // this uses the create method on the users phone relationship 
    'phone' => 999999999, 
]); 

Не уверен, что если чейнинга это возможно, как хорошо, но для удобства чтения я бы не рекомендовал его (т.е. User::create([])->phone()->create([]);)

+0

Ошибка ошибки в строке '' name '=> $ request-> input (' name '); 'в нем указано исключение фатальной ошибки в phonecontroller. синтаксическая ошибка, неожиданное ';', expecting ']' @pistachio –

+1

Извините, отпустите ';' отдельно с ',' '' name '=> $ request-> input (' name '), ' – Pistachio

+0

wow it работал: D спасибо u брат может у, пожалуйста, объясните мне эту строку '' name '=> $ request-> input (' name '), '? Я понимаю, что я беру атрибут имени из формы и помещаю его в объект $ user. & then u r используя '' user_id '=> $ user-> id; ', чтобы присвоить значение user_id из объекта $ user. то почему мне нужно указывать эти строки в моих моделях? 'public function user() { return $ this-> принадлежитTo (User :: class); } ' и ' public function phone() { return $ this-> hasOne (Phone :: class); } ' –

Смежные вопросы