Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/10.x' into 10.x
Browse files Browse the repository at this point in the history
  • Loading branch information
TBlindaruk committed Apr 18, 2023
2 parents 3259360 + 95ffddc commit 6f575fc
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 4 deletions.
5 changes: 4 additions & 1 deletion src/Illuminate/Cache/CacheManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,10 @@ protected function createArrayDriver(array $config)
*/
protected function createFileDriver(array $config)
{
return $this->repository(new FileStore($this->app['files'], $config['path'], $config['permission'] ?? null));
return $this->repository(
(new FileStore($this->app['files'], $config['path'], $config['permission'] ?? null))
->setLockDirectory($config['lock_path'] ?? null)
);
}

/**
Expand Down
29 changes: 28 additions & 1 deletion src/Illuminate/Cache/FileStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ class FileStore implements Store, LockProvider
*/
protected $directory;

/**
* The file cache lock directory.
*
* @var string|null
*/
protected $lockDirectory;

/**
* Octal representation of the cache file permissions.
*
Expand Down Expand Up @@ -210,7 +217,14 @@ public function forever($key, $value)
*/
public function lock($name, $seconds = 0, $owner = null)
{
return new FileLock($this, $name, $seconds, $owner);
$this->ensureCacheDirectoryExists($this->lockDirectory ?? $this->directory);

return new FileLock(
new static($this->files, $this->lockDirectory ?? $this->directory, $this->filePermission),
$name,
$seconds,
$owner
);
}

/**
Expand Down Expand Up @@ -364,6 +378,19 @@ public function getDirectory()
return $this->directory;
}

/**
* Set the cache directory where locks should be stored.
*
* @param string|null $lockDirectory
* @return $this
*/
public function setLockDirectory($lockDirectory)
{
$this->lockDirectory = $lockDirectory;

return $this;
}

/**
* Get the cache key prefix.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ public function orWhereMorphRelation($relation, $types, $column, $operator = nul
* Add a morph-to relationship condition to the query.
*
* @param \Illuminate\Database\Eloquent\Relations\MorphTo|string $relation
* @param \Illuminate\Database\Eloquent\Model|string $model
* @param \Illuminate\Database\Eloquent\Model|string|null $model
* @return \Illuminate\Database\Eloquent\Builder|static
*/
public function whereMorphedTo($relation, $model, $boolean = 'and')
Expand All @@ -457,6 +457,10 @@ public function whereMorphedTo($relation, $model, $boolean = 'and')
$relation = $this->getRelationWithoutConstraints($relation);
}

if (is_null($model)) {
return $this->whereNull($relation->getMorphType(), $boolean);
}

if (is_string($model)) {
$morphMap = Relation::morphMap();

Expand Down Expand Up @@ -506,7 +510,7 @@ public function whereNotMorphedTo($relation, $model, $boolean = 'and')
* Add a morph-to relationship condition to the query with an "or where" clause.
*
* @param \Illuminate\Database\Eloquent\Relations\MorphTo|string $relation
* @param \Illuminate\Database\Eloquent\Model|string $model
* @param \Illuminate\Database\Eloquent\Model|string|null $model
* @return \Illuminate\Database\Eloquent\Builder|static
*/
public function orWhereMorphedTo($relation, $model)
Expand Down
20 changes: 20 additions & 0 deletions tests/Database/DatabaseEloquentBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1660,6 +1660,15 @@ public function testWhereMorphedTo()
$this->assertEquals([$relatedModel->getMorphClass(), $relatedModel->getKey()], $builder->getBindings());
}

public function testWhereMorphedToNull()
{
$model = new EloquentBuilderTestModelParentStub;
$this->mockConnectionForModel($model, '');

$builder = $model->whereMorphedTo('morph', null);
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "morph_type" is null', $builder->toSql());
}

public function testWhereNotMorphedTo()
{
$model = new EloquentBuilderTestModelParentStub;
Expand Down Expand Up @@ -1688,6 +1697,17 @@ public function testOrWhereMorphedTo()
$this->assertEquals(['baz', $relatedModel->getMorphClass(), $relatedModel->getKey()], $builder->getBindings());
}

public function testOrWhereMorphedToNull()
{
$model = new EloquentBuilderTestModelParentStub;
$this->mockConnectionForModel($model, '');

$builder = $model->where('bar', 'baz')->orWhereMorphedTo('morph', null);

$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where "bar" = ? or "morph_type" is null', $builder->toSql());
$this->assertEquals(['baz'], $builder->getBindings());
}

public function testOrWhereNotMorphedTo()
{
$model = new EloquentBuilderTestModelParentStub;
Expand Down

0 comments on commit 6f575fc

Please sign in to comment.