Skip to content

Instantly share code, notes, and snippets.

@extralam
Last active April 24, 2020 06:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save extralam/5d84e692ce1b5e759319d6f684d00a99 to your computer and use it in GitHub Desktop.
Save extralam/5d84e692ce1b5e759319d6f684d00a99 to your computer and use it in GitHub Desktop.
Laravel BaseModel class - This is wrapped BaseModel for quickly write findOne{FieldName}("value") or findBy{FieldName}And{FieldName}
<?php
/**
* Created by PhpStorm.
* User: alan
* Date: 24/12/2018
* Time: 5:47 PM
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class BaseModel extends Model
{
static public function __callStatic($method, $params)
{
if (starts_with($method, "findOne")) {
$fieldname = lcfirst(substr($method, strlen("findOne")));
$fieldnamesAnd = explode("And", $fieldname);
$fieldnamesOr = explode("Or", $fieldname);
if (count($fieldnamesAnd) > 1 && count($fieldnamesOr) > 1) {
} else {
$clazz = get_called_class();
$result = $clazz::where(DB::raw('1'), '1');
if (count($fieldnamesAnd) >= 1) {
foreach ($fieldnamesAnd as $key => $field) {
$result = $result->where(lcfirst($field), $params[$key]);
}
}
else if(count($fieldnamesOr) >= 1) {
foreach ($fieldnamesOr as $key => $field) {
$result = $result->orWhere(lcfirst($field), $params[$key]);
}
}
return $result->first();
}
}
if (starts_with($method, "findBy")) {
$fieldname = substr($method, strlen("findBy"));
$fieldnamesAnd = explode("And", $fieldname);
$fieldnamesOr = explode("Or", $fieldname);
if (count($fieldnamesAnd) > 1 && count($fieldnamesOr) > 1) {
} else {
$clazz = get_called_class();
$result = $clazz::where(DB::raw('1'), '1');
if (count($fieldnamesAnd) >= 1) {
foreach ($fieldnamesAnd as $key => $field) {
$result = $result->where(lcfirst($field), $params[$key]);
}
}
else if (count($fieldnamesOr) >= 1) {
foreach ($fieldnamesOr as $key => $field) {
$result = $result->orWhere(lcfirst($field), $params[$key]);
}
}
return $result->get();
}
}
return parent::__callStatic($method, $params);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment