1 回答
TA贡献1804条经验 获得超7个赞
这是未经测试的,当然可以改进,但这应该可以满足您的要求:
将以下方法添加到您的模型中,或者更好的是添加到由所有其他模型扩展的基本模型中:
/**
* An array containing the names of all of this model's columns
* @var []
*/
private $_columnNames = [];
/**
* Get an array of info for the columns of the given connection and table
* @return array
*/
public function columnInfo()
{
return DB::connection($this->connection)->select(DB::raw('SHOW FULL COLUMNS FROM '.$this->table.';'));
}
/**
* Get an array of all the column names for this db model
* @return array
*/
public function getColumnNames()
{
if (!$this->_columnNames) {
$this->_columnNames = Arr::pluck($this->columnInfo(), 'Field');
}
return $this->_columnNames;
}
/**
* Get all records where any table column is like the given value
* @param string $value
* @param array $selectColumns An array of columns to return
* @return \Illuminate\Database\Query\Builder
*/
public static function whereAnyColumnLike($value, $selectColumns)
{
$queryColumns = (new self)->getColumnNames();
$selectColumns = $selectColumns ?: $queryColumns;
$query = self::select($selectColumns);
foreach($queryColumns as $key => $column) {
$function = $key === 0 ? 'where' : 'orWhere';
$query->$function($column, 'LIKE', $value);
}
return $query;
}
然后你可以打电话SomeModel::whereAnyColumnLike('%pet%')->get();
- 1 回答
- 0 关注
- 128 浏览
添加回答
举报