Как решить Вызов функции-члена отдела () на bool в laravel - PullRequest
0 голосов
/ 23 октября 2019

У меня две таблицы отделов и предметов. У одного отдела может быть много предметов, поэтому у него может быть много отношений. Но когда я звоню $ subject-> отдела () -> сохранить ($ отдел); , это показывает мне вышеуказанную ошибку

МОЯ модель отдела

 protected $primaryKey='dept_id';
public function subjects()
{
    return $this->hasMany(Subject::class);
}

МойТема Модель

 protected $primaryKey='sub_id';
    public function department()
{
    return $this->belongsTo(Department::class);
}

И в моем семени я пробую это

$departments = array(
            array('name' => 'Bachelor of Business Administration'),
            array('name' => 'Bachelor of Computer Science and Engineering'),
            array('name' => 'Bachelor of Science in Civil Engineering'),
            array('name' => 'Bachelor of Science in Mechanical Engineering'),
            array('name' => 'Bachelor of Electrical & Electronics Engineering'),
            array('name' => 'Bachelor of Science in Nursing'),
            array('name' => 'Bachelor of Arts in Tourism and Hospitality Management'),
            array('name' => 'Bachelor of Science in Agriculture'),
            array('name' => 'Bachelor of Arts in Economics'),
        );
        Department::insert($departments);
        $subjects = array(
            array('name' => 'Software'),
            array('name' => 'Networking'),
        );
        $department=Department::where('name','Bachelor of Computer Science and Engineering')->first();
        $subject= Subject::insert($subjects);
        $subject->department()->save($department);

Но я всегда получаю эту ошибку enter image description here

Пожалуйстапомогите мне решить эту проблему. Я хочу сохранить все предметы с их идентификаторами отделов.

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Как я вижу, вы использовали $ subject = Subject :: insert ($ subject);который вернет bool (0 или 1) как результат вашей функции вставки, и вы пытаетесь вызвать отношение Department () для этого, поэтому он дает ошибку.

0 голосов
/ 23 октября 2019

Я вижу, проблема в ":: insert ()". Он вернет логическое значение как true / false.

Я бы предложил использовать create () вместо insert (). Однако с использованием create () вы не сможете добавить несколько строк одновременно, поэтому там вы должны создать цикл foreach для массива $ subject и добавлять его туда один за другим.

Вы должны изменить свой подход, вот код ссылки.

$department = Department::where('name','Bachelor of Computer Science and Engineering')->first();

$subjects = array(
    array('name' => 'Software'),
    array('name' => 'Networking'),
);

foreach ($subjects as $subject) {
    $department->subjects()->create($subject);
}
...