无需翻译即可获取所有密钥
Get all keys without translations
我有这个实体:
class Keyword extends Model
{
use HasFactory;
protected $table = "keywords";
protected $fillable = [
'key',
'description',
'project_page_id'
];
public function keywordsTranslated()
{
return $this->hasMany(KeywordTranslated::class);
}
public function projectPage()
{
return $this->belongsTo(ProjectPage::class)->withDefault();
}
}
还有这个:
class KeywordTranslated extends Model
{
use HasFactory;
protected $table = "keywords_translated";
protected $fillable = [
'translation',
'language_id',
'keyword_id'
];
public function keyword()
{
return $this->belongsTo(Keyword::class)->withDefault();
}
public function language()
{
return $this->belongsTo(Language::class)->withDefault();
}
}
而且我想获取所有 keywords
没有特定 language
的 keywordTranslated
。
我这样试过:
public function searchTranslatedKeys(
int $projectPageId,
int $curentPage,
int $languageId,
string $search = null
) {
$query = $this->model->newQuery();
$query->where('project_page_id', $projectPageId);
if ($search) {
$query->where('key', 'LIKE', "%{$search}%");
}
$query->doesntHave('keywordsTranslated');
$query->orderBy('id', 'DESC');
if ($search) {
return $query->get();
}
return $query->get()->forPage($curentPage, 20);
}
但在这种情况下,我的 return 是空的。
例如,在关键字中我有:
id key description
1 addItem description for this item
2 deleteItem description for this item
3 editItem description for this item
在keword中翻译:
translation keyword_id language_id
Add item 1 1
Add item new 1 2
Delete item 2 1
我想获取所有没有语言 2
的密钥,对于前面的示例,我应该收到 2 个 ID = 2 和 3 的密钥,因为这些密钥没有此语言的 kewordTranslated
.如果语言 ID 为 1,我应该只获取 ID = 3 的关键字,因为该关键字没有针对该语言的 kewordTranslated
你可以使用whereDoesntHave
它会根据不存在关系来限制您的结果:
而不是:
$query->doesntHave('keywordsTranslated');
您可以使用:
$query->whereDoesntHave('keywordsTranslated',function ($query) use ($languageId) {
$query->where('language_id','=',$languageId);
});
我有这个实体:
class Keyword extends Model
{
use HasFactory;
protected $table = "keywords";
protected $fillable = [
'key',
'description',
'project_page_id'
];
public function keywordsTranslated()
{
return $this->hasMany(KeywordTranslated::class);
}
public function projectPage()
{
return $this->belongsTo(ProjectPage::class)->withDefault();
}
}
还有这个:
class KeywordTranslated extends Model
{
use HasFactory;
protected $table = "keywords_translated";
protected $fillable = [
'translation',
'language_id',
'keyword_id'
];
public function keyword()
{
return $this->belongsTo(Keyword::class)->withDefault();
}
public function language()
{
return $this->belongsTo(Language::class)->withDefault();
}
}
而且我想获取所有 keywords
没有特定 language
的 keywordTranslated
。
我这样试过:
public function searchTranslatedKeys(
int $projectPageId,
int $curentPage,
int $languageId,
string $search = null
) {
$query = $this->model->newQuery();
$query->where('project_page_id', $projectPageId);
if ($search) {
$query->where('key', 'LIKE', "%{$search}%");
}
$query->doesntHave('keywordsTranslated');
$query->orderBy('id', 'DESC');
if ($search) {
return $query->get();
}
return $query->get()->forPage($curentPage, 20);
}
但在这种情况下,我的 return 是空的。
例如,在关键字中我有:
id key description
1 addItem description for this item
2 deleteItem description for this item
3 editItem description for this item
在keword中翻译:
translation keyword_id language_id
Add item 1 1
Add item new 1 2
Delete item 2 1
我想获取所有没有语言 2
的密钥,对于前面的示例,我应该收到 2 个 ID = 2 和 3 的密钥,因为这些密钥没有此语言的 kewordTranslated
.如果语言 ID 为 1,我应该只获取 ID = 3 的关键字,因为该关键字没有针对该语言的 kewordTranslated
你可以使用whereDoesntHave
它会根据不存在关系来限制您的结果:
而不是:
$query->doesntHave('keywordsTranslated');
您可以使用:
$query->whereDoesntHave('keywordsTranslated',function ($query) use ($languageId) {
$query->where('language_id','=',$languageId);
});