select('contents.*') ->where('contents.status', '<>', self::STATUS_DELETED) ->where('module_handler', $handler) ->orderBy('created_at'); // join user email and user name to results when needed if ($joinAuthor) { $query = $query->join('users', 'users.id', '=', 'contents.user_id') ->select('contents.*', 'users.name AS author_name', 'users.email AS author_email'); } return $query; } /** * Updates current model with information about changed columns * * @param array $fields * @param array $request * * @return int number of changed columns */ public function updateWithHistory(array $fields, array $request) { $editBatch = uniqid(); $changed = 0; foreach ($fields as $fieldDB => $fieldRequest) { // ignore non-existing fields if (!isset($this->$fieldDB) || !isset($request[$fieldRequest])) { continue; } // remove any whitespaces around real content $request[$fieldRequest] = trim($request[$fieldRequest]); if ($this->$fieldDB != $request[$fieldRequest]) { // setup history object $history = [ 'user_id' => \Auth::user()->id, 'content_id' => $this->id, 'edit_batch' => $editBatch, 'column' => $fieldRequest, 'old_value' => $this->$fieldDB, 'new_value' => $request[$fieldRequest] ]; // save history ContentHistory::create($history); // save change into database $this->$fieldDB = $request[$fieldRequest]; $changed++; } } $this->save(); return [$editBatch, $changed]; } /** * Mark relationship with its historical records * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function history() { return $this->hasMany('App\Models\ContentHistory'); } /** * Mark relationship with users table * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function author() { return $this->belongsTo('App\Models\User', 'user_id'); } }