php laravel функция вызова из сопоставления \ App \ CourseStart-> find (any) -> student-> count () с конкатенацией - PullRequest
2 голосов
/ 09 июля 2020

сначала я могу написать это \App\CourseStart->find(any)->students->count() и буду работать нормально, я вынужден объединить те же переменные $object->$k->count()

    $object = (`\App\CourseStart->find(any)) collation laravel

    App\CourseStart {#1309 ▼
    #dates: array:2 [▶]
    #fillable: array:15 [▶]
    #connection: "mysql"
    #table: "course_starts"
    #primaryKey: "id"
    #keyType: "int"
    +incrementing: true
    #with: []
    #withCount: []
    #perPage: 15
    +exists: true
    +wasRecentlyCreated: false
    #attributes: array:6 [▶]
    #original: array:6 [▶]
    #changes: []
    #casts: []
    #classCastCache: []
    #dateFormat: null
    #appends: []
    #dispatchesEvents: []
    #observables: []
    #relations: array:1 [▶]
    #touches: []
    +timestamps: true
    #hidden: []
    #visible: []
    #guarded: array:1 [▶]
    #forceDeleting: false
    }

    $k = 'students'  is relation

    so $object->{$k}     =  \App\CourseStart->find(any)->students this work 100%

    Illuminate\Database\Eloquent\Collection {#1310 ▼
      #items: array:2 [▼
      0 => App\Student {#1311 ▶}
      1 => App\Student {#1314 ▶}
    ]
    }

$object->{$k}->count(); работа получить результат "2"

$f = ['count()','','']

теперь я пытаюсь написать это $object->{$k}->$f[0] и $object->$k->{$f[0]}

у меня есть эта ошибка сообщения

Exception
Property [count] does not exist on this collection instance.

теперь, как объединить функцию count () to $ object -> {$ k}

Не уверены, какой адрес подходит для вопроса?

1 Ответ

0 голосов
/ 09 июля 2020

после некоторых экспериментов

$f = ['count','','']// remove brackets of the functions
$f2 = $f[0];// assign to a variable for extracting the function from the array
$object->{$k}->$f2()// this will work

источник: https://www.php.net/manual/en/functions.variable-functions.php

Я тестировал его в своем проекте как любимый:

$x = Page::where ( 'slug', $page_slug );
        $fA = ['count','get',''];
        $f = $fA[0];
        dd( $x->$f());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...