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 Request $request * * @return int number of changed columns */ public function updateWithHistory(array $fields, Request $request) { $editBatch = uniqid(); $changed = 0; foreach ($fields as $fieldDB => $fieldRequest) { // 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 $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'); } }