я использую специальный помощник базы данных и получаю сообщение об ошибке «Вызов функции-члена whereRaw () для массива» - PullRequest
0 голосов
/ 15 мая 2019

добрый день; Я создаю базу данных помощника, чтобы уменьшить мой код в работе с фреймами Laravel, но когда я использую функцию в своем помощнике, я получаю сообщение об ошибке «Вызов функции-члена whereRaw () для массива», это мой вспомогательный код

namespace App\Helpers;
    use DB;

    class dBHelper
    {
        /**
         * This functin retrive all data with pagination .
         */

        public static function pagination($dbName,$Tablename,$Condition="",$data)
        {
            $stattment =DB::connection(''.$dbName.'')-> select('select * from  '.$Tablename.' ')
                ->whereRaw(''.$Condition.'', $data)
                ->Paginate(1);

            return $stattment;
        }


    }

это мой контроллер

$dataView['products']=dBHelper::pagination('mysql','products','`status`=? AND `deleted`=?',array(1,1));

1 Ответ

1 голос
/ 16 мая 2019

Проблема в том, что метод select() фактически выполняет запрос.

Ваш DB::connection('name') вызов возвращает экземпляр

Illuminate\Database\ConnectionInterface

У этого есть метод выбора

/**
 * Run a select statement against the database.
 *
 * @param  string  $query
 * @param  array   $bindings
 * @param  bool  $useReadPdo
 * @return array
 */
public function select($query, $bindings = [], $useReadPdo = true);

Как вы можете видеть, тип возврата здесь array.

Лучше всего позвонить по методу table(), который вернет свободно создатель запросов.

/**
 * Begin a fluent query against a database table.
 *
 * @param  string  $table
 * @return \Illuminate\Database\Query\Builder
 */
public function table($table);

Итак, чтобы достичь того, чего вы хотите, ваш код должен выглядеть следующим образом.

return DB::connection($dbName)
    ->table($tableName)
    ->select(['*'])
    ->whereRaw($condition, $data)
    ->paginate($count);

Это вернет экземпляр

\Illuminate\Contracts\Pagination\LengthAwarePaginator

Я должен добавить, что paginate(1) вернет нумерованный список из 1 записи. Если вам нужен только один, используйте first().

Надеюсь, это поможет.

...