Fix is / is not already joined.

This commit is contained in:
James Cole
2016-03-02 12:52:36 +01:00
parent 6b277c5e67
commit ca32ae4561
3 changed files with 50 additions and 16 deletions

39
app/Models/BaseModel.php Normal file
View File

@@ -0,0 +1,39 @@
<?php
/**
* BaseModel.php
* Copyright (C) 2016 Sander Dorigo
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
namespace FireflyIII\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class BaseModel
*
* @package FireflyIII\Models
*/
class BaseModel extends Model
{
/**
* @param $query
* @param $table
*
* @return bool
*/
public static function isJoined($query, $table)
{
$joins = $query->getQuery()->joins;
if($joins == null) {
return false;
}
foreach ($joins as $join) {
if ($join->table == $table) {
return true;
}
}
return false;
}
}

View File

@@ -4,7 +4,6 @@ use Auth;
use Carbon\Carbon; use Carbon\Carbon;
use Crypt; use Crypt;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Query\JoinClause; use Illuminate\Database\Query\JoinClause;
@@ -46,7 +45,7 @@ use Watson\Validating\ValidatingTrait;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionJournal before($date) * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionJournal before($date)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionJournal transactionTypes($types) * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionJournal transactionTypes($types)
*/ */
class TransactionJournal extends Model class TransactionJournal extends BaseModel
{ {
use SoftDeletes, ValidatingTrait; use SoftDeletes, ValidatingTrait;
@@ -92,8 +91,6 @@ class TransactionJournal extends Model
'date' => 'required|date', 'date' => 'required|date',
'encrypted' => 'required|boolean', 'encrypted' => 'required|boolean',
]; ];
/** @var bool */
private $joinedTypes = false;
/** /**
* @param $value * @param $value
@@ -312,8 +309,9 @@ class TransactionJournal extends Model
public function scopeExpanded(EloquentBuilder $query) public function scopeExpanded(EloquentBuilder $query)
{ {
// left join transaction type: // left join transaction type:
$query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'); if (!self::isJoined($query, 'transaction_types')) {
$this->joinedTypes = true; $query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id');
}
// left join transaction currency: // left join transaction currency:
$query->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transaction_journals.transaction_currency_id'); $query->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transaction_journals.transaction_currency_id');
@@ -356,9 +354,8 @@ class TransactionJournal extends Model
public function scopeTransactionTypes(EloquentBuilder $query, array $types) public function scopeTransactionTypes(EloquentBuilder $query, array $types)
{ {
if (!$this->joinedTypes) { if (!self::isJoined($query, 'transaction_types')) {
$query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'); $query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id');
$this->joinedTypes = true;
} }
$query->whereIn('transaction_types.type', $types); $query->whereIn('transaction_types.type', $types);
} }

View File

@@ -115,13 +115,11 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate
{ {
$offset = $page > 0 ? $page * 50 : 0; $offset = $page > 0 ? $page * 50 : 0;
return $category->transactionjournals()->withRelevantData()->take(50)->offset($offset) return $category->transactionjournals()->expanded()->take(50)->offset($offset)
->orderBy('transaction_journals.date', 'DESC') ->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.order', 'ASC')
->orderBy('transaction_journals.id', 'DESC') ->orderBy('transaction_journals.id', 'DESC')
->get( ->get(TransactionJournal::QUERYFIELDS);
['transaction_journals.*']
);
} }
@@ -140,13 +138,13 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate
return $category->transactionjournals() return $category->transactionjournals()
->after($start) ->after($start)
->before($end) ->before($end)
->withRelevantData()->take(50)->offset($offset) ->expanded()
->take(50)
->offset($offset)
->orderBy('transaction_journals.date', 'DESC') ->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.order', 'ASC')
->orderBy('transaction_journals.id', 'DESC') ->orderBy('transaction_journals.id', 'DESC')
->get( ->get(TransactionJournal::QUERYFIELDS);
['transaction_journals.*']
);
} }